Mfc CMenu用子菜单替换项目

Mfc CMenu用子菜单替换项目,mfc,submenu,cmenu,Mfc,Submenu,Cmenu,我有一个带有一些项目的MFC菜单。我想将单个菜单项转换为子菜单或替换为其他菜单项。有没有一种简单的方法可以做到这一点?该类向类成员提供修改现有菜单项的功能,方法是将正确初始化的菜单项传递给它 要用弹出菜单(子菜单)替换菜单项,必须执行3个步骤 1.创建一个新的弹出菜单 您可以通过调用来动态创建菜单,并用其填充,或者使用以下命令从资源加载现有弹出菜单: 2.初始化MENUITEMINFO结构 3.替换现有菜单项 每当修改窗口的菜单时,都需要调用。什么是“MyMainMenu”?我们应该使用“Loa

我有一个带有一些项目的MFC菜单。我想将单个菜单项转换为子菜单或替换为其他菜单项。有没有一种简单的方法可以做到这一点?

该类向类成员提供修改现有菜单项的功能,方法是将正确初始化的菜单项传递给它

要用弹出菜单(子菜单)替换菜单项,必须执行3个步骤

1.创建一个新的弹出菜单 您可以通过调用来动态创建菜单,并用其填充,或者使用以下命令从资源加载现有弹出菜单:

2.初始化
MENUITEMINFO
结构 3.替换现有菜单项
每当修改窗口的菜单时,都需要调用。

什么是“MyMainMenu”?我们应该使用“LoadMenu()”并将主菜单加载到其中吗?如果是,那么我们不能将主菜单加载到“MyMenu”变量而不是“CreatePopupMenu()”?@HariRam:
MyMainMenu
是一个窗口的主菜单。不管这是调用
LoadMenu()
,还是动态创建的结果。您也可以从资源创建
MyMenu
,只要
LoadMenu()
的参数是子菜单。一个常见的解决方案是在资源编辑器中创建一个菜单,在主菜单栏中添加虚拟条目,并根据需要添加子菜单。
CMenu MyMenu;
MyMenu.CreatePopupMenu();
MENUITEMINFO mii = { 0 };
mii.cbSize = sizeof( MENUITEMINFO );
mii.fMask = MIIM_ID | MIIM_STRING;
mii.wID = IDM_MY_MENU_ITEM1;   // #define this in your Resource.h file
mii.dwTypeData = _T( "Menu Item 1" );
MyMenu.InsertMenuItem( 0, &mii, TRUE );
MENUITEMINFO miiNew = { 0 };
miiNew.cbSize = sizeof( MENUITEMINFO );
miiNew.fMask = MIIM_SUBMENU | MIIM_STRING;
miiNew.hSubMenu = MyMenu.Detach();   // Detach() to keep the pop-up menu alive
                                     // when MyMenu goes out of scope
miiNew.dwTypeData = _T( "Some text" );
MyMainMenu.SetMenuItemInfo( IDM_ITEM_TO_BE_REPLACED,
                            &miiNew,
                            FALSE );
DrawMenuBar( hWnd );