2

私のプロジェクトには、アイテムを動的に追加する必要があるメニューがあります。元のコードでは、メニューの項目は固定されています。したがって、メニューはリソース ファイルで定義されます。

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

それはうまくいきます!

以前のコードの問題点を知りたいですか? 感謝!

4

1 に答える 1

3

私は問題を見つけたと思います。電話するべきだった

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

それ以外の

menu.AppendMenu(...);
于 2014-02-17T09:39:44.377 に答える