调用CMenu :: LoadMenu后如何附加动态菜单项?

时间:2014-02-17 09:13:09

标签: windows visual-c++ cmenu

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

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

一切正常!

我想知道我之前代码中的问题是什么?欣赏!

1 个答案:

答案 0 :(得分:2)

我认为我找到了这个问题。我应该打电话给

menu.GetSubMenu(0)->AppendMenu(...);

而不是

menu.AppendMenu(...);