我有一个带有一些项目的 MFC CMenu。我想用子菜单转换或替换单个菜单项,以及其他菜单项。有没有简单的方法可以做到这一点?
问问题
1487 次
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 回答