使 CDialog 可见

Posted

技术标签:

【中文标题】使 CDialog 可见【英文标题】:Making a CDialog visible 【发布时间】:2009-08-27 01:53:23 【问题描述】:

我正在尝试获取一个带有复选框的对话框。我将它添加到资源文件中,创建了对话框模板,并为对话框添加了类和事件处理程序。据我了解,现在我只需要创建该类的一个实例并调用 DoModal()。


所以,我回去做了一些调查并使用了一些代码,这就是我现在所拥有的 使用MSPSK PSKDialog; 如果(PSKDialog.DoModal()== IDOK) 别的 AfxMessageBox("不是 IDOK"); CTempoDialog 时间对话框; 如果(TempoDialog.DoModal()== IDOK)

当我运行它时,我没有从 PSLDialog.DoModal() 调用中得到任何对话框,但是我得到了 AfxMessageBox,然后出现了 TempoDialog。我在调试器中单步执行了 DoModal() 调用,它似乎可以正常运行和返回,所以我不知道我的对话框要去哪里。

刚刚又看了一遍DoModal()调用的返回值,好像马上就退出了,怎么解决?

【问题讨论】:

【参考方案1】:

它应该可以使对话框可见 - 假设对话框模板具有 WS_VISIBLE 样式等等。也许对话框初始化失败? “DoModal”对话框调用是否立即退出?这表示创建窗口失败。

您使用的是什么版本的 Visual Studio?版本 6 过去不允许您在尚未加载的代码上设置断点。或者,确保已加载符号。在“模块”窗口中,右键单击包含您的代码的 dll,然后选择“加载符号”。您是使用符号信息进行调试构建还是发布构建?确保它是一个调试版本,以获得最简单的调试体验。

【讨论】:

【参考方案2】:

我不知道为什么会这样,但我添加的复选框是一个 ActiveX 控件,它破坏了我的对话框。当我发现工具箱窗格并从那里拖动一个复选框时,它工作正常。

【讨论】:

以上是关于使 CDialog 可见的主要内容,如果未能解决你的问题,请参考以下文章

从 CDialog 派生的对话框在 DoModal (MFC/C++) 之后返回 -1

在 CDialog 类型的子窗体之间传递数据

MFC中CDialog 的OnKeyDown()为啥不好使?

窗口嵌入到另一个窗口(VC和QT都有)

如何将 CDialog::SetDefId 与非按钮控件一起使用?

在 CDialog 中显示尺寸夹点?