MFC CListBox.AddString() не показывает строку
Я создаю приложение MFC и пытаюсь добавить список в диалоговом классе. Когда я использую конфигурацию отладки, она получает ошибку и приложение вылетает. Когда я использую конфигурацию выпуска, появляется диалоговое окно, но оно пустое.
Я только начал с этого, поэтому мой код является основным:
//code... (it is including #include "MyDialog.h")
CMyDialog dialog; //CMyDialog includes public CListBox variable m_listBox
CString str;
str = L"Hello";
dialog.m_listBox.AddString(str);
dialog.DoModal();
//code...
Но это все равно не работает.
В конфигурации отладки я получаю это сообщение: "Ошибка отладки завершилась!"
В конфигурации выпуска диалоговое окно пустое (вместо строки с "Hello"):
MyDialog:
,
Ошибка происходит прямо в момент вызова функции AddString(), и это происходит даже тогда, когда эта функция вызывается прямо в классе CMyDialog (например, я пытался вызвать ее в конструкторе).
Я хотел бы знать, что я делаю неправильно, я полагаю, что проблема не в самом диалоговом классе, а где-то еще. Я пытался искать через Интернет, но я не нашел решения, поэтому я здесь:)
1 ответ
То, что вы делаете неправильно, пытается использовать член (m_listBox
) слишком рано. Элементы, которые являются элементами управления диалогового окна, в отличие от неоконных типов, таких как элемент CString, находятся в состоянии, которое будет использоваться только после вызова диалога с DoModal()
,
Утверждения являются макросами отладки, поэтому вы не получаете указания на проблему в конфигурации выпуска.
Правильное место для заполнения элемента управления списком, как правило, будет OnInitDialog
переопределить функцию-член. Диалог затем вызывается на этом этапе, и элементы управления, принадлежащие диалогу, будут иметь дескрипторы окна и могут использоваться.
Если вы специально хотите передать строковый литерал в диалоговое окно, прежде чем вызывать его, тогда вы можете использовать CString в качестве переменной-члена класса диалога. Такой член существует при создании экземпляра класса и может быть установлен с помощью конструктора или общедоступного установщика или с помощью общедоступной доступности.