CMenu用子菜单替换项目

时间:2013-07-25 22:54:20

标签: mfc submenu cmenu

我有一些带有一些物品的MFC CMenu。我想用子菜单转换或替换单个菜单项,以及其他菜单项。有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

CMenu类为类成员CMenu::SetMenuItemInfo提供修改现有菜单项的方法,方法是将其正确初始化MENUITEMINFO structure

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

1。创建一个新的弹出菜单

您可以通过调用CMenu::CreatePopupMenu动态创建菜单,并使用CMenu::InsertMenuItem填充该菜单,或使用CMenu::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 );

2。初始化MENUITEMINFO结构

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" );

3。替换现有菜单项

MyMainMenu.SetMenuItemInfo( IDM_ITEM_TO_BE_REPLACED,
                            &miiNew,
                            FALSE );
DrawMenuBar( hWnd );

每当修改窗口菜单时,都需要调用DrawMenuBar