0

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

4

1 回答 1

2

该类CMenu提供类成员CMenu::SetMenuItemInfo来修改现有菜单项,方法是向其传递正确初始化的MENUITEMINFO结构

要用弹出菜单(子菜单)替换菜单项,您必须执行 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每当修改窗口的菜单时都需要调用 to 。

于 2013-07-26T00:42:43.237 回答