有什么区别
case WM_DESTROY:
PostQuitMessage(WM_QUIT);
break;
和
case WM_DESTROY:
PostQuitMessage(0);
break;
?
当您调用 时PostQuitMessage
,您传递的是退出代码,而不是消息 ID。 PostQuitMessage
将反过来WM_QUIT
为您生成(并发布)消息。
所以从技术上讲,不同之处在于PostQuitMessage(WM_QUIT)
,退出代码将是0x0012
(或十进制的 18)。而PostQuitMessage(0)
将提供退出代码0
。
当两者GetMessage
之一PeekMessage
看到WM_QUIT
消息时,它们将返回零,您可以检查参数WPARAM
部分中的退出代码。LPMSG
要返回退出代码(传递给 PostQuitMessage 的值),应用程序的消息泵可能是这样的:
MSG msg;
while (0 != GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
我们可以找到代码,其中消息循环在 GetMessage() 的“错误”为 -1 时中止。因此,如果这种情况下的应用程序突然消失,任何震惊的用户都不会知道这是什么原因。更好的方法是保持应用程序运行。而且“坏”消息也不会损坏 DefWindowProc() 函数。