如何从CEdit的控制文本(How to get text from CEdit control)

2019-08-08 16:02发布

我与ATL一个新的家伙。 所以请原谅我问这个问题。

问题的说明:一个CEdit的控制被加入到ATL对话框类。 它附着在对话框初始化函数。

//Define the edit control
ATLControls::CEdit  m_txtInput;

//In the OnInitDialog function
m_txtInput.Attach(GetDlgItem(IDC_INPUT_LINE));

m_txtInput.SetWindowText(_T("New directory"));

//In the public memeber function of the dialog GetInput()
//I have tried three kinds of method to get the text. But all of them are throw an 
//assert exception, IsWindow() failed. 
//1.
GetDlgItemText(IDC_INPUT_LINE, input);
//2.
ZeroMemory(m_lptstrInput, MAX_PATH);
m_txtInput.GetLine(0, m_lptstrInput, MAX_PATH);
//3.
BSTR input; 
m_txtInput.GetWindowText(input);

下面是关于如何从CEdit的文本的主题,但它无法正常工作。

为什么CEdit的控制可以设置文字与功能函数SetWindowText(),但不能获得通过函数GetWindowText函数文本()? 这真是让我困惑。 非常感谢,如果有人可以解释给我。

Answer 1:

CEdit是不是一个ATL类。 凡命名空间ATLControls从何而来? 没有与此名称和获取文本WTL类从它很容易:

    ATLASSERT(Edit.IsWindow()); // Make sure the control holds a handle
    CString sWindowText;
    Edit.GetWindowText(sWindowText);

该方法GetWindowText从ATL不过来了,包GetWindowTextLengthGetWindowText API。 后者MSDN文章还具有一个代码段示出了典型的使用。

既然你提到IsWindow不适合你,最有可能的问题是,你的编辑控件包装类变量根本就没有真正的控制手柄,因此从虚无中获取文本是不可能的。



Answer 2:

这已经过测试与MFC和VS2015:

//
// Get char string/CString from CEdit m_ceDate;
// where
// DDX_Control(pDX, IDC_EDIT_DATE, m_ceDate);

char cdateBuf[128];
UINT nCountOfCharacters = GetDlgItemText(IDC_EDIT_DATE, cdateBuf, 16);
CString csDate = cdateBuf; 


文章来源: How to get text from CEdit control
标签: c++ atl cedit