MFC(C++)CDialog DoModal()没有按预期工作

Posted

技术标签:

【中文标题】MFC(C++)CDialog DoModal()没有按预期工作【英文标题】:MFC (C++) CDialog DoModal() not working as expected 【发布时间】:2010-03-09 03:37:27 【问题描述】:

我有一个由这个应用程序加载的插件。这个插件用 DoModal() 调用一些对话框。

我希望这些对话框的功能如下:如果我单击对话框后面的应用程序窗口,对话框会闪烁并且不允许应用程序成为焦点。

但是,在使用 DoModal() 调用的其他对话框之一中,如果我单击应用程序窗口,它不会执行闪烁的操作,并且在一段时间后应用程序的关闭/最小化按钮变为活动状态(嗯,只是颜色)。它们并不是真正处于活动状态,并且窗口变得有些白,并且标题栏显示(未响应)... 可能有什么问题,我该如何解决?我尝试将对话框的属性设置为 System Modal: True 和 Set Foreground: True 但它似乎不起作用.. :(

谢谢..

编辑:我想指出,在 Windows 任务栏中,应用程序只有一个条目用于正确行为,但是当启动具有不正确行为的对话框时,会启动另一个“窗口”。 .所以看起来像(应用程序)(对话框标题)..我想要达到的效果只是(应用程序).​​.

EDIT2:该对话框确实仍在工作,即使主应用程序 UI 被锁定。这个对话框还使用 DoModal() 生成另一个对话框,当它出现时,另一个条目被添加到任务栏,即(应用程序)(对话框 1)(对话框 2)。我可以移动 Dialog Box2 并单击 Dialog Box1 并弄乱它,没有任何东西被锁定.. 只是那个主应用程序.. 但是,如果 Dialog Box2 不允许操作 Dialog Box1,如果 Dialog Box2 是,我希望它打开..

【问题讨论】:

【参考方案1】:

之前的发帖人说得对(尽管他删除了他的答案)。我将生成对话框的函数移动到在应用程序的线程中运行并且它起作用了。..

但是,有没有办法从另一个线程执行此操作?或许通过指定父窗口?

谢谢..

【讨论】:

以上是关于MFC(C++)CDialog DoModal()没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

MFC C++:setfocus 也设置捕获吗?

如何使用修改后的 DLGTEMPLATEEX 调用 CDialog::DoModal()

当 CDialog.DoModal() 函数无法创建对话框时?

在启动前隐藏一个MFC DoModal对话框

MFC DoModal对话

MFC DoModal 对话框