CMenu::Detach

CMenu::Detachで、メニューハンドルとCMenuオブジェクトの紐付けを解除する。

CMenu クラス | Microsoft Learn

CFrameWnd_.cppで、

// ハンドラOnItem1_1()
void CFrameWnd_::OnItem1_1(){	// メニュー項目Item1_1のコマンドハンドラ

	// メニュー項目の追加.
	CMenu cMenu;
	cMenu.Attach(m_hMenuDefault);
	cMenu.AppendMenu(MF_ENABLED | MF_STRING, 102, _T("Item2"));
	::DrawMenuBar(m_hWnd);

}

この場合、Detachが無いと、

1回追加した後で2回目の追加で
1回追加した後で2回目の追加で

1回追加した後で2回目の追加で、

こうなっちゃう
こうなっちゃう

こうなっちゃう。
1回目でm_hMenuDefaultがcMenuのデストラクタで破棄されちゃうからであり、

Detachがあれば、

押されても
押されても

押されても、

追加される。
追加される。

追加される。

Sample/mfc/CMenu/Detach/src/CMenu at master · bg1bgst333/Sample · GitHub