为啥 MFC 中的模态对话框实际上是内部无模态的?

Posted

技术标签:

【中文标题】为啥 MFC 中的模态对话框实际上是内部无模态的?【英文标题】:Why is the modal dialog in MFC actually internally modeless?为什么 MFC 中的模态对话框实际上是内部无模态的? 【发布时间】:2012-09-06 09:32:19 【问题描述】:

阅读这篇文章后,我的脑海中出现了这个问题:http://www.codeproject.com/Articles/3911/The-singular-non-modality-of-MFC-modal-dialogs。他提到 MFC 中的模态对话框并不是严格的模态对话框,而是作为一个无模态对话框(内部)实现的,它带有一些花里胡哨的功能,使其表现得像一个模态对话框。

具体来说,他说:

MFC 命令路由机制使用消息映射的组合 和虚拟功能来实现它的功能和真正的模态对话框 将完全破坏这种机制,因为模态消息循环 在 MFC 命令路由机制的范围之外进行控制

谁能解释一下这个说法?如果他们试图实现一个真正的模态对话框,将会出现什么问题,这将大大澄清问题。

【问题讨论】:

【参考方案1】:

模态对话框会停止您的消息循环,但仍然必须有一个消息循环来处理对话框的事件。因此,模态对话框只是一个具有自己内部消息循环的非模态对话框。

【讨论】:

以上是关于为啥 MFC 中的模态对话框实际上是内部无模态的?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 模态对话框的奇怪行为

检测MFC中的模态对话框

MFC模态与非模态对话框

如何创建一个模态的对话框

主窗口作为无模式对话框的 MFC 应用程序

MFC——对话框,模态对话框