使用 DoModal 调用时,对话框不显示 CListBox 内容
Posted
技术标签:
【中文标题】使用 DoModal 调用时,对话框不显示 CListBox 内容【英文标题】:Dialog box does not show CListBox Contents when called with DoModal 【发布时间】:2014-11-13 21:53:14 【问题描述】:我正在尝试初始化一个包含 CListBox 的 CDialog 框。我想通过在 CDialogBox 上调用 DoModal 来做到这一点。但是问题是当我调用 DoModal 时,对话框打开,但 CListBox 是空的。 (它的项目已经初始化) 当我调用 ShowWindow(SW_SHOW) 时,还会显示对话框,并且 CListBox 包含我插入其中的项目。但是,我不想使用这种方法,因为它不会暂停程序的执行。 (DoModal 暂停程序执行,直到窗口关闭)
所以我的问题是:如何使用 DoModal 打开对话框,并让 CListBox 显示其内容? 非常感谢。
初始化 CDialog 子类,并调用 start(打开对话框)
loadNewWorld = new LoadNewWorld(this);
loadNewWorld->Create(IDD_LOAD_NEW_WORLD , this);
loadNewWorld->Start();
LoadNewWorld 类:
//Constructor header
LoadNewWorld::LoadNewWorld(CWnd* pParent /*=NULL*/) : CDialog(LoadNewWorld::IDD, pParent)
//This shows the dialog box, but does NOT show the items in CListBox
void LoadNewWorld::Start ()
populateList();
DoModal();
//This shows the dialog box AND shows the populated CListBox. However, don't want to do this way
void LoadNewWorld::Start ()
populateList();
ShowWindow(SW_SHOW);
【问题讨论】:
对话可以无模式(使用Create
)或模态(使用DoModal
)创建。这些方法不能混用。此外,如果您要使用DoModal
,则列表框的填充必须在其OnInitDialog
处理程序中完成,即。创建对话框和列表框窗口之后。
【参考方案1】:
在对话框启动并创建时填充列表视图。
当没有创建对话框时,您不能填充列表框。执行此操作的最佳位置是 OnInitDialog。您的问题是您想在创建列表框之前填充它(在调用 DoModal 之前)。
正如注释已经告诉你的那样:你不能混合使用 DoModal 和 Create。
【讨论】:
以上是关于使用 DoModal 调用时,对话框不显示 CListBox 内容的主要内容,如果未能解决你的问题,请参考以下文章
当 CDialog.DoModal() 函数无法创建对话框时?