私のメイン フレームには、現在のドキュメント タイプのメニューを含む CMFCMenuBar メンバーがあります。サブメニューを動的に追加/削除したいと思います。たとえば、ユーザーがマップ ペインを表示することを選択した場合、「ファイル」メニューの横にマップ サブメニューを追加したいと考えています。
逆に、マップ ペインが閉じられた場合は、マップ メニュー項目も削除したいと考えています。
機能するが、私が気に入らないことの 1 つは、ON_UPDATE_COMMAND_UI
ハンドラーのメニュー項目を単に無効にすることです。
Frame にはメソッドが呼び出されていますが、そのメソッドは aGetMenuBar()
を返すconst CMFCMenuBar *
ため、外部から変更することはできません。ゲッターを追加したので、メニューバーへの非 const 参照を取得しましたが、それも機能しませんでした:
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MAP));
CMFCMenuBar & menuBar = pFrm->GetNonConstMenuBar(); // Custom getter
menuBar.InsertButton(CMFCToolBarMenuButton(0, menu, -1));
menuBar.AdjustLayout();
menuBar.AdjustSizeImmediate();
上記のコードはvoid CMyMenuBar::AddSubMenu ()
、DynamicMenu
サンプルの を改変したものです。ただし、その特定のコードが実行されるかどうか、またはいつ実行されるかを確認できなかったため、このサンプルは壊れていると感じています。サンプルでは、メニュー バーがリセットされているとき、または状態がまだレジストリに保存されていないときにのみ、コードが実行されます。
これは不可能ですか、それとも何か間違っていますか?
サブメニューの追加/削除に代わる良い方法はありますか?