我有一些带有一些物品的MFC CMenu。我想用子菜单转换或替换单个菜单项,以及其他菜单项。有没有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
CMenu
类为类成员CMenu::SetMenuItemInfo
提供修改现有菜单项的方法,方法是将其正确初始化MENUITEMINFO
structure。
要用弹出菜单(子菜单)替换菜单项,您必须执行3个步骤。
您可以通过调用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 );
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" );
MyMainMenu.SetMenuItemInfo( IDM_ITEM_TO_BE_REPLACED,
&miiNew,
FALSE );
DrawMenuBar( hWnd );
每当修改窗口菜单时,都需要调用DrawMenuBar
。