В моем проекте есть меню, которое необходимо добавить в элемент динамически. В исходном коде пункты в меню являются стационарными. Таким образом, меню определяются в файле ресурсов:Как добавить динамический элемент меню после вызова CMenu :: LoadMenu?
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);
Теперь есть новое требование о том, нужно добавить динамический пункт меню после загрузки ресурса меню. Я передал этот aricle: 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));
Он отлично работает!
Я хочу знать, в чем проблема в моем прежнем коде? Цените!