【问题标题】:Fail to call DoModal Twice in a Dialog-based VC++ application在基于对话框的 VC++ 应用程序中调用 DoModal 两次失败
【发布时间】:2015-06-23 17:52:02
【问题描述】:

我是 VC++ 编程的初学者,在开发基于对话框的 VC++ 应用程序 (VS2010+WIN7) 时遇到问题。非常感谢任何帮助或建议!

我创建了两个对话框类,CTestDialog 和 CMyDialog。 CTestDialog 是应用程序运行时显示的对话框。单击“确定”按钮时,我想显示另一个对话框,即 CMyDialog 两次。下面是代码:

void CTestDialog::OnBnClickedOk()

{

CDialog::OnOK(); 

CMyDialog dlg1;

dlg1.DoModal();

MessageBox("Show me again!");

CMyDialog dlg2;

dlg2.DoModal();

}

第一个对话框 dlg1 显示正确,但第二个对话框 dlg2 不起作用。 VS告诉我

“调试断言失败! 文件:f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wingdi.cpp 行:1119"

谁能解决这个问题?非常感谢!

【问题讨论】:

  • #include "CMyDialog.h"了吗?
  • 如果你查看生成断言的代码,它应该会给你一个提示。
  • 可能您正在创建/销毁CMyDialog 中的一些窗口句柄并且没有正确清理。尝试将每组放在括号中 {CMyDlg x; x.DoModal();} 或向我们展示 CMyDialog 中的内容
  • 请格式化您的代码。

标签: c++ visual-c++ mfc


【解决方案1】:

对于 Windows 应用程序,您不能同时弹出两个模态对话框,这就是您获得第二个 DoModal 的断言的原因。

【讨论】:

  • 只要第二个是第一个的孩子就可以了。
  • 非常感谢 Matt 和 @MarkRansom 的 cmets。我的计划是进行心理实验。人们会看到一张图片做出选择,看到另一张图片做出选择等等。这就是为什么我想显示 CMyDialog 两次(或两次以上)。我只是希望 CMyDialog 成为一个界面,每次人们单击“确定”按钮时显示不同的图片。我可以创建显示每张图片的对话框,但这种方式太笨拙了。如果您知道任何实现这一点的方法,我们将不胜感激!
  • 大家好,我刚刚将基于对话框的应用程序替换为基于单个文档的应用程序,问题就消失了。无论如何,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2013-11-25
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多