c++ - MFC CListBox.AddString() 不显示字符串
问题描述
我正在创建一个 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...
但无论如何它都不起作用。
在调试配置中,我收到以下消息:“调试断言失败!”
在发布配置中,对话框是空的(而不是带有“Hello”的一行):
我的对话:
.
该错误发生在调用 AddString() 函数的那一刻,即使在 CMyDialog 类中调用该函数时也会发生该错误(例如,我试图在构造函数中调用它)。
我想知道我做错了什么,我想问题不在于对话框类本身,而在于其他地方。我试图通过互联网搜索,但我没有找到解决方案,所以我在这里:)
解决方案
您做错的事情是m_listBox
过早地尝试使用成员 ( )。作为对话框控件的成员,与 CString 成员等非窗口类型相反,只有在使用 调用对话框后才能使用DoModal()
。
断言是调试宏,这就是为什么您在发布配置中看不到问题的原因。
填充列表框控件的正确位置通常是OnInitDialog
覆盖成员函数。然后该阶段已调用该对话框,并且该对话框拥有的控件将具有窗口句柄并且可以使用。
如果您特别想在调用对话框之前将字符串文字传递给对话框,那么您可以将 CString 作为对话框类的成员变量。这样的成员存在于类实例的构造中,并且可以通过构造函数、公共设置器或具有公共可访问性来设置。
推荐阅读
- javascript - 加载模块脚本失败:服务器以非 JavaScript MIME 类型“”响应。强制执行严格的 MIME 类型检查
- css - 显示:使用@media 没有按预期工作
- c++ - 保留/删除 cout 语句导致输出在 C++ 中发生变化
- python - Gensim - TF-IDF,如何执行适当的 Genesis TF-IDF?
- javascript - 未捕获的类型错误:无法读取未定义的属性“ajax”
- c# - 试图向新成员发送欢迎信息,但我尝试过的大多数事情似乎根本不起作用
- flutter - 使用 image_picker 选择图像后 Flutter 当前选项卡上下文不可见
- forms - 为 Telegram 创建可填写的表单
- amazon-web-services - 使用 Terraform 迭代对象内的列表
- python - Python内存泄漏解决方法