在详细阐述another question的答案时(我自己),我想出了使用MessageBox报告对话框结果的想法。它是使用<meta name="viewport" content="width=device-width, initial-scale=1">
函数创建的WinAPI模式对话框。
但是,我注意到在对话框的过程函数中处理DialogBox()
将阻止出现消息框。我想了解背后的机制。
以下是完整代码,引用的消息框位于WM_DESTROY
之前的末尾:
return 0
答案 0 :(得分:4)
当您使用DialogBox
而不是DialogBoxParam
时,对话框会运行自己的内部处理WM_DESTROY
的消息循环。当您从对话框过程发布WM_QUIT
消息时,您将生成对话框不会使用的附加消息*,因此一旦DialogBox
函数返回,它将保留在线程的消息队列中。
然后调用MessageBox
,它运行自己的消息循环。这会立即将WM_QUIT
拉出队列,退出循环并在对话框显示之前返回。
(*实际上它不是“真实”消息 - 设置了一个内部标志,表示已经过了退出 - 但后续消息循环的效果相同)