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

时间:2018-05-31 09:01:35

标签: c++ visual-studio mfc clistbox

我正在创建一个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!” Debug Assertion failed!

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

MyDialog:

MyDialog

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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