3

有什么区别

case WM_DESTROY:
    PostQuitMessage(WM_QUIT);
    break;

case WM_DESTROY:
    PostQuitMessage(0);
    break;

?

4

2 回答 2

9

当您调用 时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;
于 2013-06-20T16:11:55.940 回答
1

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

于 2013-09-01T22:53:32.067 回答