【发布时间】:2023-03-11 17:37:01
【问题描述】:
对话框上的按钮会导致创建一个子对话框,并以模态方式显示。
例如:
void ParentDialog::OnButton()
{
ChildDialog dlg;
int ret = dlg.DoModal();
}
父对话框最初没有按预期响应。但是,子对话框也会对服务器模块进行 COM 调用,这会导致服务器将 COM 调用回父对话框...以更新显示的数据等。在一种情况下,这会导致父对话框突然变得响应即使子对话框仍在屏幕上,也会再次出现。即使父对话框仍在耐心等待OnButton()返回,这两个对话框现在都可以交互了。
怎么会这样?我正在搜索代码,但有什么具体的我应该寻找的吗?
【问题讨论】:
-
这似乎不是 Windows API 代码。您能否更新标签以包含正在使用的框架?
-
对不起,这是 MFC。添加标签。
-
我的水晶球说某处有代码,由 COM 流量激活,调用 EnableWindow()。这就是父窗口可以再次交互的方式。
-
@HansPassant 是模态对话框,通过在显示时禁用父窗口并在隐藏时启用它并没有更复杂的方法来真正建立它们的模态?
-
基本上。但他们也泵出一个消息循环,这就是它在 OnButton() 上阻塞的原因。 MFC 做的有点不一样,具体细节不记得了。
标签: winapi com mfc modal-dialog