gpt4 book ai didi

windows - 如何在调用 CMenu::LoadMenu 后附加一个动态菜单项?

转载 作者:可可西里 更新时间:2023-11-01 11:54:00 31 4
gpt4 key购买 nike

在我的项目中,有一个菜单需要动态附加一个项目。在原始代码中,菜单中的项目是固定的。所以菜单是在资源文件中定义的:

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

现在有一个新的需求,需要在加载资源菜单后追加一个动态菜单项。我提到了这篇文章: Dynamic menu using 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(...);

关于windows - 如何在调用 CMenu::LoadMenu 后附加一个动态菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824895/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com