MFC CListBox.AddString()不显示字符串

Luk*_*lík 2 c++ mfc clistbox visual-studio

我正在创建一个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...
Run Code Online (Sandbox Code Playgroud)

但无论如何它都不起作用.

在调试配置中,我收到以下消息:"Debug Assertion failed!" Debug Assertion失败了!

在发布配置中,对话框为空(而不是带有'Hello'的行):

MyDialog:

MyDialog.

错误发生在调用AddString()函数的时刻,即使在CMyDialog类中调用此函数时也会发生错误(例如我试图在构造函数中调用它).

我想知道我做错了什么,我想这个问题不是在对话类本身,而是在其他地方.我试图通过互联网搜索,但我找不到解决方案,所以我在这里:)

acr*_*075 5

你做错了是试图m_listBox过早使用member().作为对话框控件的成员,与CString成员之类的非窗口类型相反,只有在调用对话框后才能使用DoModal().

断言是调试宏,这就是为什么你没有在Release配置中得到问题的原因.

填充列表框控件的正确位置通常是OnInitDialog覆盖成员函数.然后该对话框已被该阶段调用,对话框拥有的控件将具有窗口句柄并可以使用.

如果您特别希望在调用对话框之前将字符串文字传递给对话框,则可以将CString作为对话框类的成员变量.这样的成员在构造类实例时存在,并且可以通过构造函数或公共setter设置,或者通过具有公共可访问性来设置.