MFC CListBox.AddString () не показывает строку - PullRequest
0 голосов
/ 31 мая 2018

Я создаю приложение 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...

Но он все равно не работает.

В конфигурации отладки я получаю следующее сообщение: "Ошибка отладки!" Debug Assertion failed!

В конфигурации выпуска диалоговое окно пустое (вместо строки с 'Hello '):

MyDialog:

MyDialog.

Ошибка возникает в момент вызова функции AddString () и происходитдаже когда эта функция вызывается правильно в классе CMyDialog (например, я пытался вызвать ее в конструкторе).

Я хотел бы знать, что я делаю неправильно, я полагаю, что проблема не в диалогеСам класс, но где-то еще.Я пытался искать через Интернет, но я не нашел решения, поэтому я здесь:)

1 Ответ

0 голосов
/ 31 мая 2018

То, что вы делаете неправильно, пытается использовать члена (m_listBox) слишком рано.Члены, которые являются элементами управления диалогового окна, в отличие от неоконных типов, таких как член CString, могут использоваться только в том случае, если диалог был вызван с помощью DoModal().

Утверждения являются макросами отладки, поэтомувы не получаете указаний на проблему в конфигурации выпуска.

Правильным местом для заполнения элемента управления списком, как правило, является функция переопределения OnInitDialog.Диалог был вызван на этом этапе, и элементы управления, принадлежащие диалогу, будут иметь дескрипторы окна и могут использоваться.

Если вы специально хотите передать строковый литерал в диалоговое окно, прежде чем вызывать диалоговое окно, тогда вы можете использовать CString как переменную-член класса диалога.Такой член существует при построении экземпляра класса и может быть установлен с помощью конструктора или общедоступного установщика, или с помощью общедоступной доступности.

...