首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MFC CListBox.AddString()不显示字符串

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

Stack Overflow用户
提问于 2018-05-31 17:01:35
回答 1查看 968关注 0票数 2

我正在创建一个MFC应用程序,并尝试在对话框类中添加列表框。当我使用调试配置时,它得到错误和应用程序崩溃。当我使用release configuration时,对话框出现,但为空。

我刚开始这样做,所以我的代码是基本的:

代码语言:javascript
运行
复制
//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类中调用了这个函数(例如,我试图在构造函数中调用它),也会发生错误。

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

EN

Stack Overflow用户

回答已采纳

发布于 2018-05-31 17:33:39

您正在做的错误是试图过早地使用成员(m_listBox)。作为对话框控件的成员,而不是像CString成员这样的非窗口类型,只有在使用DoModal()调用对话框后才会处于要使用的状态。

断言是调试宏,这就是为什么在发布配置中没有问题的指示。

填充listbox控件的正确位置通常是OnInitDialog重写成员函数。然后,该阶段调用了该对话框,并且该对话框所拥有的控件将具有窗口句柄并可以使用。

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

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50620460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档