在我的项目中,有一个菜单需要动态附加一个项目。在原始代码中,菜单中的项是静止的。因此,菜单是在资源文件中定义的:
IDM_SERVER_OPTIONS MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Connect", IDC_LAUNCHITEM_CONNECT
MENUITEM "&Delete", IDC_REMOVE_SERVER
END
END
并加载到代码中:
CMenu menu;
menu.LoadMenu(IDM_SERVER_OPTIONS);
现在,有一个新的要求需要在加载资源菜单后附加动态菜单项。我提到了这个算术:使用 mfc 的动态菜单接下来,我写了这些代码:
CMenu menu;
menu.LoadMenu(IDM_SERVER_OPTIONS);
CMenu *autoConnectMenu = new CMenu;
autoConnectMenu->CreatePopupMenu();
autoConnectMenu->AppendMenu(MF_STRING | MF_ENABLED,
IDC_MENU_AUTO_CONNECT_SERVER,
utils::LoadString(IDS_MENU_AUTO_CONNECT_SERVER));
menu.AppendMenu(MF_POPUP,
(UINT)autoConnectMenu->m_hMenu,
L"auto connect server");
不幸的是,它不起作用。无法显示新菜单项"自动连接服务器"。然后,我尝试了 HMENU 功能:
CMenu menu;
menu.LoadMenu(IDM_SERVER_OPTIONS);
AppendMenu((HMENU)menu.GetSubMenu(0),
MF_STRING | MF_ENABLED,
IDC_AUTO_CONNECT_SERVER,
utils::LoadString(IDS_MENU_AUTO_CONNECT_SERVER));
它工作正常!
我想知道我以前的代码中有什么问题?欣赏!
我认为
我已经找到了问题。我应该打电话
menu.GetSubMenu(0)->AppendMenu(...);
而不是
menu.AppendMenu(...);