6

私はATLの新人です。ですから、この質問をすることをお許しください。

問題の説明: 1 つの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()ですか? それは本当に私を混乱させます。誰かが私に説明してくれたらどうもありがとう。

4

2 に答える 2

7

CEditは ATL クラスではありません。名前空間はどこATLControlsから来たのですか? この名前の WTL クラスがあり、そこからテキストを取得するのは簡単です。

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

ただし、このメソッドGetWindowTextは ATL から来ており、ラップGetWindowTextLengthGetWindowTextAPI です。後者の MSDN 記事には、一般的な使用法を示すコード スニペットもあります。

IsWindowあなたはそれがうまくいかないと述べているので、最も可能性の高い問題は、編集コントロール ラッパー クラス変数に実際のコントロールのハンドルがないため、何もないところからテキストを取得できないことです。

于 2013-01-29T07:24:35.803 に答える