我刚注意到程序中的所有模态对话框都有一个奇怪的行为,
代码将停止广告dlg.DoModal()调用,但它下面的窗口仍然处于活动状态并接受输入。 这发生在我的所有CDialog派生窗口(它实际上是CBCGPDialog)和系统消息框,文件对话框等。
我得到的唯一结论是必须有一些消息泵处理窗口消息,即使它不应该。
这是否发生在其他人身上?以及如何解决它的任何想法?
接受输入意味着他们仍然有回应。
例如,如果我有一个添加按钮,在显示对话框后打开一个模态对话框,我仍然可以点击相同的按钮来显示另一个。
EDIT。
我发现了错误。
在LoadFrame上传递的位掩码中存在一些错误(对于大型机)。
我不知道女巫位,但其中一个会禁用一些meccanism使对话窗口工作
答案 0 :(得分:0)
CDialog::DoModal
做了两件事。首先,它禁用对话框的父窗口,使其不再响应事件,然后对通过AfxGetMainWnd()
获得的主窗口执行相同操作。它使用RunModalLoop()
运行自己的消息泵。