如何从CEdit控件获取文本

时间:2013-01-29 03:32:53

标签: c++ atl cedit

我是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);

Here是一个关于如何从CEdit获取文本但不起作用的主题。

为什么CEdit控件可以用函数SetWindowText()设置文本但是不能通过GetWindowText()函数获取文本?这让我很困惑。非常感谢,如果有人可以帮我解释一下。

2 个答案:

答案 0 :(得分:6)

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对你不起作用,那么最可能的问题是你的编辑控件包装类变量没有真正控件的句柄,因此从无法获取文本是不可能的。

答案 1 :(得分:1)

已经使用MFC& VS2015:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="4" />
    </switches>
  </system.diagnostics>
</configuration>