Как добавить динамический пункт меню после вызова 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);
Теперь существует новое требование, которое заключается в добавлении динамического пункта меню после загрузки меню ресурсов. Я сослался на эту статью: динамическое меню с использованием 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 ответ
Решение
Я думаю, что я нашел проблему. Я должен был позвонить
menu.GetSubMenu(0)->AppendMenu(...);
вместо
menu.AppendMenu(...);