PostQuitMessage(WM_QUIT)vs PostQuitMessage(0)

时间:2013-06-20 16:06:42

标签: windows api winapi

之间有什么区别
case WM_DESTROY:
    PostQuitMessage(WM_QUIT);
    break;

case WM_DESTROY:
    PostQuitMessage(0);
    break;

2 个答案:

答案 0 :(得分:9)

当您致电PostQuitMessage时,您会传递退出代码,而不是消息ID。 PostQuitMessage会依次为您生成(并发布)WM_QUIT消息。

从技术上讲,区别在于PostQuitMessage(WM_QUIT),退出代码为0x0012(十进制为18)。而PostQuitMessage(0)将提供退出代码0

GetMessagePeekMessage看到WM_QUIT消息时,它们将返回零,您可以检查WPARAM LPMSG部分中的退出代码1}}参数。

要返回退出代码(传递给PostQuitMessage的值),应用程序的消息泵可能是这样的:

MSG msg;
while (0 != GetMessage(&msg, 0, 0, 0)) {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

return msg.wParam;

答案 1 :(得分:1)

我们可以找到代码,消息循环在-1的“错误”上停止 GetMessage函数()。因此,如果在这种情况下应用程序突然消失,没有震惊的用户 会发现原因是什么。更好的方法是让应用程序保持运行。 而且“坏”消息也不会损坏DefWindowProc()函数。