如何从CEdit控件获取文本 [英] How to get text from CEdit control
问题描述
我是ATL的新手.所以请原谅我问这个问题.
I'm a new guy with ATL. So forgive me to ask this question.
问题描述: 一个CEdit控件被添加到ATL对话框类中.它附加在对话框的初始化函数中.
Problem description: One CEdit control is added into a ATL dialog class. It's attached in the dialog initialize function.
//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获取文本的主题,但是它无法正常工作.
Here is a topic about how to get text from CEdit but it is not working.
为什么可以使用SetWindowText()函数将CEdit控件设置为文本,但不能通过GetWindowText()函数获取文本?这真的让我感到困惑.非常感谢有人能为我解释一下.
Why the CEdit control could be set text with the function SetWindowText() but can't get the text by the function GetWindowText()? It's really confuse me. Thanks a lot if someone could explain it for me.
推荐答案
CEdit
不是ATL类.名称空间ATLControls
来自何处?有一个使用该名称的WTL类,从中获取文本很容易:
CEdit
is not an ATL class. Where the namespace ATLControls
comes from? There is a WTL class with this name and getting text from it is easy:
ATLASSERT(Edit.IsWindow()); // Make sure the control holds a handle
CString sWindowText;
Edit.GetWindowText(sWindowText);
方法GetWindowText
来自ATL,并且包装 GetWindowText
API.后面的MSDN文章也有一个代码片段,显示了典型用法.
The method GetWindowText
is coming from ATL however and wraps GetWindowTextLength
and GetWindowText
API. The latter MSDN article also has a code snippet showing typical usage.
由于您提到IsWindow
不适用于您,因此最可能的问题是您的编辑控件包装器类变量没有真正的控件句柄,因此从零开始获取文本是不可能的.
Since you mention that IsWindow
does not work for you, the most likely problem is that your edit control wrapper class variable just does not have a handle of a real control, and hence getting text from nothing is impossible.
这篇关于如何从CEdit控件获取文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!