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

Here is a topic about how to get text from CEdit but it is not working.

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

5
nl ja de
Я передаю эту проблему, используя API окна напрямую. Используйте :: GetWindowText (m_txtInput.m_hwnd, buffer, size) вместо прямого вызова метода GetWindowText из элемента управления, затем он работает. Но я все еще хочу знать, почему предыдущие методы не могут передать утверждение. Благодарю.
добавлено автор Erxin, источник
Кажется, что результат :: GetWindowText пуст ... Почему? ...
добавлено автор Erxin, источник
Проблема основана, проблема assert является причиной метода GetInput() вызывается после закрытия диалогового окна. После нажатия кнопки OK относительное окно будет выпущено. Благодарю.
добавлено автор Erxin, источник

2 ответы

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 и обертывает GetWindowTextLength и GetWindowText API. В последней статье MSDN также есть фрагмент кода, показывающий типичное использование.

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

6
добавлено
atlcontrols.h не является стандартным ATL-файлом/классами, это чьи-то расширения.
добавлено автор Roman R., источник
это был образец, заброшенный 10 лет назад, в то время как ATL по-прежнему является поддерживаемой частью продукта в хорошем состоянии - обратите внимание на разницу
добавлено автор Roman R., источник
В мой проект добавлен один класс ATL, и я включаю заголовочный файл #include для ссылки на ATLControls.
добавлено автор Erxin, источник
Проблема решена, моя ошибка - вызвать метод GetInput после закрытия диалогового окна. После этого не существует окна, поэтому GetWindowText не работает. Все же разрешите поблагодарить вас. :)
добавлено автор Erxin, источник
Этот текст копируется из заголовка atlcontrols.h: //ATLControls.h: классы-помощники для общих элементов управления//// Эти классы предназначены только для образца и//НЕ поддерживаются Microsoft//// Это часть библиотеки активных шаблонов.//Авторское право (C) 1996-1998 Корпорация Microsoft//Все права защищены.//// Этот исходный код предназначен только в качестве дополнения к//Справочнику библиотеки активных шаблонов и соответствующей//электронной документации, предоставляемой библиотекой.//См. Эти источники для получения подробной информации о продукте//Active Template Library.
добавлено автор Erxin, источник

This has been tested with 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
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest