Вы можете динамически создать объект CMenu
, например:
CMenu *menu = new CMenu;
menu->CreatePopupMenu();
// Add items to the menu
menu->AppendMenu(MF_STRING, menuItemID, "Text");
...
Затем добавьте это подменю в главное меню:
wnd->GetMenu()->AppendMenu(MF_POPUP, (UINT_PTR)menu->m_hMenu, "Menu Name");
Что касается карты сообщений,предполагая, что все ваши идентификаторы пунктов меню находятся в определенном диапазоне, вы можете использовать ON_COMMAND_RANGE
, чтобы отобразить весь диапазон в одну функцию.Эта функция получит идентификатор в качестве параметра, и внутри функции вы можете выполнять различные операции на основе идентификатора.