Мой основной фрейм имеет элемент CMFCMenuBar, который содержит меню текущего типа документа.Я хотел бы добавить / удалить подменю динамически.Например, если пользователь выбирает отображение панели карты, я хочу добавить подменю карты рядом с меню «Файл».
И наоборот, если панель карты закрывается, я также хочу удалитьпункты меню карты.
Одна вещь, которая работает, но которая мне не нравится, это просто отключение пунктов меню в обработчиках ON_UPDATE_COMMAND_UI
.
Во фрейме есть метод с именем GetMenuBar()
, но этотвозвращает мне const CMFCMenuBar *
, поэтому я не могу изменить его извне.Я добавил геттер, чтобы получить неконстантную ссылку на строку меню, но она тоже не сработала:
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
. У меня такое ощущение, что этот образец не работает, так как я не смог выяснить, выполняется ли или нет этот конкретный код. В этом примере код выполняется только при сбросе строки меню иликогда еще ни одно состояние не было сохранено в реестре.
Это просто невозможно или я что-то не так делаю?
Будет ли хорошая альтернатива добавлению / удалению подменю?