CUserControl::Destroy

CMainWindow、そしてCUserControlにも、Destroyを実装する。
MainWindow.hに、

Destroyを追加。
MainWindow.cppで、

こう定義する。
UserControl.hにも

Destroyを追加し、
UserControl.cppでは、

MessageBoxを出すためにオーバーライドしてるけど、これ定義しなくても基底クラスのCWindow::Destroyで破棄される。
CMainWindow::Destroyの呼び出しは、

ここや、

ここ。

閉じる時にOKしたら
閉じる時にOKしたら

閉じる時にOKしたら、

ここに来る
ここに来る

ここに来る。

中はこうで、今度はCUserControlを破棄する。
中はこうで、今度はCUserControlを破棄する。

中はこうで、今度はCUserControlを破棄する。

これが出て
これが出て

これが出て、

今度はここに来る
今度はここに来る

今度はここに来る。

CUserControlのウィンドウ破棄したので、今度はオブジェクト開放。
CUserControlのウィンドウ破棄したので、今度はオブジェクト開放。

CUserControlのウィンドウ破棄したので、今度はオブジェクト開放。

デストラクタでDestroy
デストラクタでDestroy

CUserControlの基底クラスCWindowのデストラクタでDestroy。

でオブジェクトが解放
でオブジェクトが解放

でオブジェクトが解放。

ユーザコントロール消えてる
ユーザコントロール消えてる

ユーザコントロール消えてる。

子ウィンドウの破棄は終わったので、このウィンドウの閉じる処理
子ウィンドウの破棄は終わったので、このウィンドウの閉じる処理

子ウィンドウの破棄は終わったので、このウィンドウの閉じる処理。

メインウィンドウが閉じられたので、CMainWindowのOnDestroy
メインウィンドウが閉じられたので、CMainWindowのOnDestroy

メインウィンドウが閉じられたので、CMainWindowのOnDestroy。

ここに来て
ここに来て

ここに来て、

メッセージループ終了
メッセージループ終了

メッセージループ終了。

今度はExitInstanceのメインウィンドウ解放で
今度はExitInstanceのメインウィンドウ解放で

今度はExitInstanceのメインウィンドウ解放で、

デストラクタからDestroy
デストラクタからDestroy

デストラクタからDestroy。

これはそういうこと
これはそういうこと

これはそういうこと。

CUserControlは破棄されてるし、CMainWindowもウィンドウは破棄されてるから、意味ないけども
CUserControlは破棄されてるし、CMainWindowもウィンドウは破棄されてるから、意味ないけども

CUserControlは破棄されてるし、CMainWindowもウィンドウは破棄されてるから、意味ないけども。
まあ、でもこれでCMainWindowオブジェクトも破棄された。
(WM_CLOSEじゃない場合は、CMainWindow::Destroyにはウィンドウの破棄も要るなあ。いや、ウィンドウの破棄だけをするメソッドかな。ここでいうDestroyは子ウィンドウの破棄なんだよね。)

Test/winapi/CUserControl/Destroy/src/CUserControl at master · bg1bgst333/Test · GitHub