我正在创建一个MFC应用程序,并尝试在对话框类中添加列表框。当我使用调试配置时,它得到错误和应用程序崩溃。当我使用release configuration时,对话框出现,但为空。
我刚开始这样做,所以我的代码是基本的:
//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类中调用了这个函数(例如,我试图在构造函数中调用它),也会发生错误。
我想知道我做错了什么,我想问题不在对话框类本身,而在其他地方。我试着在互联网上搜索,但没有找到解决方案,所以我在这里:)
发布于 2018-05-31 17:33:39
您正在做的错误是试图过早地使用成员(m_listBox
)。作为对话框控件的成员,而不是像CString成员这样的非窗口类型,只有在使用DoModal()
调用对话框后才会处于要使用的状态。
断言是调试宏,这就是为什么在发布配置中没有问题的指示。
填充listbox控件的正确位置通常是OnInitDialog
重写成员函数。然后,该阶段调用了该对话框,并且该对话框所拥有的控件将具有窗口句柄并可以使用。
如果您特别想在调用对话框之前将字符串文字从传递到对话框,那么您可以将CString作为对话框类的成员变量。这样的成员在构造类实例时存在,可以通过构造函数、公共setter或具有公共可访问性来设置。
https://stackoverflow.com/questions/50620460
复制相似问题