【发布时间】:2011-04-23 22:42:28
【问题描述】:
我的主框架有一个 CMFCMenuBar 成员,其中包含当前文档类型的菜单。 我想动态添加/删除子菜单。 例如,如果用户选择显示地图窗格,我想在“文件”菜单旁边添加地图子菜单。
反之亦然,如果地图窗格关闭,我也想删除地图菜单项。
一个可行但我不喜欢的事情是简单地禁用ON_UPDATE_COMMAND_UI 处理程序中的菜单项。
Frame 有一个名为GetMenuBar() 的方法,但该方法返回给我const CMFCMenuBar *,因此我无法从外部对其进行修改。我添加了一个 getter,因此我获得了对菜单栏的非常量引用,但这也不起作用:
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MAP));
CMFCMenuBar & menuBar = pFrm->GetNonConstMenuBar(); // Custom getter
menuBar.InsertButton(CMFCToolBarMenuButton(0, menu, -1));
menuBar.AdjustLayout();
menuBar.AdjustSizeImmediate();
以上代码是DynamicMenu示例中void CMyMenuBar::AddSubMenu ()的改编。 但我有一种感觉,这个示例被破坏了,因为我无法确定是否或何时执行该特定代码。在示例中,代码仅在菜单栏被重置时执行或尚未将状态保存到注册表时。
这是不可能的还是我做错了什么?
除了添加/删除子菜单有什么好的替代方法吗?
【问题讨论】:
标签: c++ mfc dynamic menu mfc-feature-pack