1. ホーム
  2. c++

[解決済み] PostQuitMessage()とDestroyWindow()の論理的な違いは何ですか?

2022-02-16 06:57:23

質問

私のデモのようなアプリでは

case WM_CLOSE:
    DestroyWindow(hndl);
    return 0;

そして

case WM_CLOSE:
    PostQuitMessage(0);
    return 0;

も同様です。それぞれを呼び出すとき、カーテンの裏側で何が違うのでしょうか?DestroyWindowはより直接的で、PostQuitMessageはgetmessageループを通過してfalseを返さなければならないのでしょうか?

解決方法は?

DestroyWindow がウィンドウを破壊し(サプライズ)、そのウィンドウに WM_DESTROY (を得ることができます)。 WM_NCDESTROY ) をメッセージキューに追加します。これは、デフォルトの動作である WM_CLOSE . しかし、ウィンドウが破壊されたからといって、メッセージループが終了するわけではありません。これは、閉じたときにアプリケーションを終了する特定のウィンドウと、閉じたときにアプリケーションに対して何もしない他のウィンドウ(例えば、オプションページ)がある場合に起こりえます。

PostQuitMessage を投稿します。 WM_QUIT をメッセージキューに送り、メッセージループを終了させることがよくあります。たとえば GetMessage を引くと0を返します。 WM_QUIT を出力します。これは通常 WM_DESTROY ハンドラを使用します。これはデフォルトの動作ではないので、自分で行う必要があります。