我正在创建一个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:
错误发生在调用AddString()函数的时刻,即使在CMyDialog类中调用此函数时也会发生错误(例如我试图在构造函数中调用它)。
我想知道我做错了什么,我想这个问题不是在对话类本身,而是在其他地方。我试图通过互联网搜索,但我找不到任何解决方案,所以我在这里:)
答案 0 :(得分:5)
你做错了是试图过早使用成员(m_listBox
)。作为对话框控件的成员,与CString成员之类的非窗口类型相反,只有在使用DoModal()
调用对话框后才能使用的状态。
断言是调试宏,这就是为什么你没有在Release配置中得到问题的原因。
填充列表框控件的正确位置通常是OnInitDialog
覆盖成员函数。然后该对话框已被该阶段调用,对话框拥有的控件将具有窗口句柄并可以使用。
如果您特别想在调用对话框之前将字符串文字传递给对话框,则可以将CString作为对话框类的成员变量。这样的成员在构造类实例时存在,可以通过构造函数,公共setter或公共可访问性进行设置。