Как получить текст из элемента управления 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);

Вот это тема о том, как получить текст из CEdit, но он не работает.

Почему элемент управления CEdit может быть установлен с помощью функции SetWindowText (), но не может получить текст с помощью функции GetWindowText ()? Это действительно смущает меня. Большое спасибо, если кто-то может объяснить это для меня.

5

Решение

CEdit не является классом ATL. Где пространство имен ATLControls происходит от? Существует класс WTL с таким именем, и получить текст из него легко:

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

Метод GetWindowText приходит от ATL однако и обертывания GetWindowTextLength а также GetWindowText API. В последней статье MSDN также есть фрагмент кода, показывающий типичное использование.

Поскольку вы упоминаете, что IsWindow не работает для вас, наиболее вероятная проблема заключается в том, что ваша переменная класса оболочки элемента управления редактирования просто не имеет дескриптора реального элемента управления, и, следовательно, получить текст из ничего невозможно.

6

Другие решения

Это было проверено с 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;
1

По вопросам рекламы [email protected]