CMenu::Detachで、メニューハンドルとCMenuオブジェクトの紐付けを解除する。
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回目の追加で](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20240524/20240524143641.png)
1回追加した後で2回目の追加で、
![こうなっちゃう](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20240524/20240524143747.png)
こうなっちゃう。
1回目でm_hMenuDefaultがcMenuのデストラクタで破棄されちゃうからであり、
Detachがあれば、
![押されても](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20240524/20240524144103.png)
押されても、
![追加される。](https://cdn-ak.f.st-hatena.com/images/fotolife/B/BG1/20240524/20240524144214.png)
追加される。
Sample/mfc/CMenu/Detach/src/CMenu at master · bg1bgst333/Sample · GitHub