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

MFC CListBox.AddString() doesn't show string

我正在创建 MFC 应用程序并尝试在对话框中添加列表框 class。当我使用调试配置时,出现错误并且应用程序崩溃。当我使用发布配置时,对话框出现了,但是是空的。

我刚开始用这个,所以我的代码很基础:

//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 中调用此函数时也会发生错误 class(例如,我试图在构造函数中调用它)。

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

您做错的是过早地尝试使用成员 (m_listBox)。作为对话框控件的成员,与非 window 类型(如 CString 成员)相反,只有在使用 DoModal().

调用对话框后才处于要使用的状态

断言是调试宏,这就是为什么您在发布配置中看不到问题的原因。

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

如果您特别想在调用对话框之前将字符串文字传递给对话框,那么您可以将 CString 作为对话框的成员变量 class。这样的成员在构建 class 实例时存在,并且可以通过构造函数或 public setter 或具有 public 可访问性来设置。