WM_DESTROY

WM_DESTROYは、ウィンドウが破棄された時(DestroyWindowが呼ばれた後)に発生するウィンドウメッセージ。

WM_DESTROY message - Windows applications | Microsoft Docs

DestroyWindowの後に発生しているか確認する。

WM_DESTROYプロジェクト
WM_DESTROYプロジェクト

WM_DESTROYプロジェクトで、

新しい項目
新しい項目

新しい項目で、

WM_DESTROY.cpp
WM_DESTROY.cpp

WM_DESTROY.cppを追加。

リソース
リソース

リソースを追加。

Menu
Menu

Menuリソースを追加。
で、resource.hとWM_DESTROY.rcの中身は、DestroyWindowのトピックのものをそのまま使う。

WM_DESTROY.cppでは、

メニューアイテムが選択された時、ボタンが押された時、それぞれのDestroyWindowの前後にOutputDebugStringでログを出す。

WM_DESTROYが発生した時も、OutputDebugStringでログを出す。

デバッグ開始
デバッグ開始

デバッグ開始で、

メニューアイテム
メニューアイテム

メニューアイテムItem1-1を選択すると、ウィンドウは破棄されて終了する。

ログ
ログ

"ID_ITEM_1_1 before"の後に、DestroyWindowが呼ばれているはずで、その後に"WM_DESTROY"が出力されていて、"ID_ITEM_1_1 after"となっている。

ボタン
ボタン

ボタンButton1も、

ログ
ログ

同じような出力順。

閉じるボタン
閉じるボタン

さて、閉じるボタンはどうだろうか。

閉じた場合
閉じた場合

WM_DESTROYが出ているということは、その前にDestroyWindowによる破棄が行われている可能性がある。
しかし、DestroyWindowの呼び出しは、ここにはない別のメッセージの既定処理で行われている模様。

Sample/winapi/WM_DESTROY/WM_DESTROY/src/WM_DESTROY at master · bg1bgst333/Sample · GitHub