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(または 10 進数で 18) になることです。一方PostQuitMessage(0)、の終了コードを提供します0

どちらかがメッセージGetMessagePeekMessage表示すると、ゼロが返され、パラメーターの一部でWM_QUIT終了コードを確認できます。WPARAMLPMSG

終了コード (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 に答える