CMainWindow、そしてCUserControlにも、Destroyを実装する。
MainWindow.hに、
Destroyを追加。
MainWindow.cppで、
こう定義する。
UserControl.hにも
Destroyを追加し、
UserControl.cppでは、
MessageBoxを出すためにオーバーライドしてるけど、これ定義しなくても基底クラスのCWindow::Destroyで破棄される。
CMainWindow::Destroyの呼び出しは、
ここや、
ここ。

閉じる時にOKしたら、

ここに来る。

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

これが出て、

今度はここに来る。

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

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

でオブジェクトが解放。


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

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

ここに来て、

メッセージループ終了。

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

デストラクタからDestroy。

これはそういうこと。

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