違いは何ですか
case WM_DESTROY:
PostQuitMessage(WM_QUIT);
break;
と
case WM_DESTROY:
PostQuitMessage(0);
break;
?
を呼び出すときPostQuitMessage
は、メッセージ ID ではなく、終了コードを渡します。 PostQuitMessage
がメッセージを生成 (および投稿)WM_QUIT
します。
したがって、技術的には、違いはPostQuitMessage(WM_QUIT)
、終了コードが0x0012
(または 10 進数で 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() 関数を損傷しません。