从DialogBox处理WM_DESTROY事件时,MessageBox将无法工作

时间:2015-06-15 20:06:27

标签: c user-interface winapi

在详细阐述another question的答案时(我自己),我想出了使用MessageBox报告对话框结果的想法。它是使用<meta name="viewport" content="width=device-width, initial-scale=1"> 函数创建的WinAPI模式对话框。

但是,我注意到在对话框的过程函数中处理DialogBox()将阻止出现消息框。我想了解背后的机制。

以下是完整代码,引用的消息框位于WM_DESTROY之前的末尾:

return 0

1 个答案:

答案 0 :(得分:4)

当您使用DialogBox而不是DialogBoxParam时,对话框会运行自己的内部处理WM_DESTROY的消息循环。当您从对话框过程发布WM_QUIT消息时,您将生成对话框不会使用的附加消息*,因此一旦DialogBox函数返回,它将保留在线程的消息队列中。

然后调用MessageBox,它运行自己的消息循环。这会立即将WM_QUIT拉出队列,退出循环并在对话框显示之前返回。

(*实际上它不是“真实”消息 - 设置了一个内部标志,表示已经过了退出 - 但后续消息循环的效果相同)