在MFC中如何删除POPUP类型的菜单项。 RemoveMenu()要么采取ID或位置。由于POPUP菜单没有ID,左边的选项是使用位置。
但我没有得到我可以调用RemoveMenu()的方式和地点。
File Edit Test Test_submenu_1 Test_submenu_2 Test_submenu_3 > submenu_3_item_1 Test_submenu_4 Test_submenu_5
我想删除Test_submenu_3?我没有得到如何找到测试的CMenu对象,以便我可以通过传递submenu_3_item_1的位置“2”来调用RemoveMenu()。
非常感谢任何有关此事的建议。
谢谢!
答案 0 :(得分:7)
您不能使用LoadMenu,因为此功能就是这样做的。
修改加载的菜单后,当用于加载它的菜单对象超出范围时,它将被终止。您必须修改当前使用的菜单。
您的菜单是主菜单的弹出式部分,位置第二。它包含5个项目,第二个是另一个弹出窗口。据我了解,您想要删除此项目并弹出此项目。 要使其工作,您必须向主窗口询问当前菜单:
CMenu* pMenu = GetMenu(); // get the main menu
CMenu* pPopupMenu = pMenu->GetSubMenu(2);//(Test menu with item....)
pPopupMenu->RemoveMenu(2, MF_BYPOSITION);
当然,这段代码来自主框架。如果你想在别处使用它,你将不得不使用指向主框架的指针访问所有。
答案 1 :(得分:0)
'Test'是顶级菜单上的第3个菜单项(按位置)。它只是水平渲染而不是垂直渲染。假设您有一个顶级菜单的句柄,请使用与获取子菜单相同的代码,就像获取“测试”菜单一样。
答案 2 :(得分:0)
尝试以下方法。首先得到Test子菜单(索引2),然后一旦你得到它,你就告诉它按位置(也是2)删除它的Test_submenu_3子菜单。
CMenu topMenu;
topMenu.LoadMenu(IDR_YOUR_MENU);
CMenu& testSubMenu = *topMenu.GetSubMenu(2);
testSubMenu.RemoveMenu(2,MF_BYPOSITION);