Visual c++ 在MFC中删除菜单

Visual c++ 在MFC中删除菜单,visual-c++,mfc,Visual C++,Mfc,在MFC中,如何删除弹出式菜单项。RemoveMenu()获取ID或位置。因为弹出菜单并没有ID,所以左边的选项是使用位置 但我不知道如何以及在何处调用RemoveMenu() 文件编辑测试 测试子菜单1 测试子菜单2 测试子菜单\u 3>子菜单\u 3\u项目\u 1 测试子菜单4 测试子菜单5 我想删除测试子菜单3?我不知道如何为测试找到CMenu对象,以便通过传递子菜单\u 3\u项\u 1的位置“2”来调用RemoveMenu() 如有任何建议,我们将不胜感激 谢谢 “测试”是顶层菜单上

在MFC中,如何删除弹出式菜单项。RemoveMenu()获取ID或位置。因为弹出菜单并没有ID,所以左边的选项是使用位置

但我不知道如何以及在何处调用RemoveMenu()

文件编辑测试 测试子菜单1 测试子菜单2 测试子菜单\u 3>子菜单\u 3\u项目\u 1 测试子菜单4 测试子菜单5 我想删除测试子菜单3?我不知道如何为测试找到CMenu对象,以便通过传递子菜单\u 3\u项\u 1的位置“2”来调用RemoveMenu()

如有任何建议,我们将不胜感激


谢谢

“测试”是顶层菜单上的第三个菜单项(按位置)。它只是水平渲染,而不是垂直渲染。假设您拥有顶级菜单的句柄,请使用与获取“测试”菜单相同的代码来获取子菜单。

请尝试以下操作。您首先获得测试子菜单(索引2),然后在获得该子菜单后,告诉它按位置删除其测试子菜单(也是2)


您不能使用LoadMenu,因为此函数正是这样做的

修改加载的菜单后,当用于加载它的菜单对象超出范围时,它将被终止。您必须修改当前使用的菜单

您的菜单是主菜单的弹出部分,位于第二位。它包含5个项目,第二个是另一个弹出窗口。据我所知,您希望删除此项目并弹出此项目。 要使其工作,您必须向主窗口询问当前菜单:

CMenu* pMenu = GetMenu(); // get the main menu
CMenu* pPopupMenu = pMenu->GetSubMenu(2);//(Test menu with item....)
pPopupMenu->RemoveMenu(2, MF_BYPOSITION);
当然,这段代码来自主框架。如果您想在其他地方使用它,则必须使用指向主框架的指针访问所有

CMenu topMenu;
topMenu.LoadMenu(IDR_YOUR_MENU);
CMenu& testSubMenu = *topMenu.GetSubMenu(2);
testSubMenu.RemoveMenu(2,MF_BYPOSITION);
CMenu* pMenu = GetMenu(); // get the main menu
CMenu* pPopupMenu = pMenu->GetSubMenu(2);//(Test menu with item....)
pPopupMenu->RemoveMenu(2, MF_BYPOSITION);