1. ホーム
  2. c++

[解決済み] WindowsのプログラムにおけるWM_QUIT、WM_CLOSE、WM_DESTROYの違いは何ですか?

2022-02-18 14:17:01

質問内容

WM_QUIT、WM_CLOSE、WM_DESTROYの各メッセージは、基本的にいつ送信され、プログラムによって定義される以外に自動的な効果があるのでしょうか?

解決方法は?

全く違うものです。

WM_CLOSE は、ウィンドウが閉じられるとき、つまりウィンドウの "X" ボタンがクリックされたとき、またはウィンドウのメニューから "Close" が選ばれたとき、あるいは Alt-F4キー が押された場合など。このメッセージを受け取った場合、それを無視するか、本当にウィンドウを閉じるか、どう扱うかはあなたの判断によります。デフォルトでは WM_CLOSE に渡される DefWindowProc() は、ウィンドウを破棄します。

WM_DESTROY はウィンドウが破壊され始めると送信されます。この段階では、反対側にある WM_CLOSE この場合、処理を止めることはできず、必要な後始末をするのみです。をキャッチすると WM_DESTROY の場合、その子ウィンドウはまだ1つも破壊されていません。

WM_NCDESTROY は、ウィンドウが破壊され終わるときに送信されます。この時点では、すべての子ウィンドウが破棄されています。

WM_QUIT は、どのウィンドウにも関連していない ( hwnd から取得した GetMessage() がNULLで、ウィンドウプロシージャが呼び出されない場合)。このメッセージは、メッセージループを停止し、アプリケーションを終了することを意味します。このとき GetMessage() は読みます。 WM_QUIT の場合、それを示す0を返します。を見てみましょう。 典型的なメッセージループのスニペット - の間、ループは継続されます。 GetMessage() は0以外を返します。

WM_QUIT が送信できます。 PostQuitMessage() 関数があります。この関数は通常、メインウィンドウが WM_DESTROY (参照 典型的なウィンドウプロシージャのスニペット ).