使用mfc的动态菜单

Ira*_*Ira 13 c++ mfc

我想在我的主菜单中添加一个菜单项,然后在运行时用项填充它.我该怎么做?除了添加项目,我怎么会有他们的消息映射条目,因为我不知道ID?

cas*_*nca 18

您可以CMenu像这样动态创建对象:

CMenu *menu = new CMenu;
menu->CreatePopupMenu();
// Add items to the menu
menu->AppendMenu(MF_STRING, menuItemID, "Text");
...
Run Code Online (Sandbox Code Playgroud)

然后将此子菜单添加到主菜单:

wnd->GetMenu()->AppendMenu(MF_POPUP, (UINT_PTR)menu->m_hMenu, "Menu Name");
Run Code Online (Sandbox Code Playgroud)

对于消息映射,假设所有菜单项ID都在一定范围内,您可以使用ON_COMMAND_RANGE将整个范围映射到单个函数.此函数将接收ID作为参数,并且在函数内,您可以根据ID执行不同的操作.


小智 10

define the menu's using #define

#define ID_SHOW   2002
#define ID_HIDE   2004

//create a menu object for main menu
CMenu *menu    = new CMenu();
menu->CreateMenu();

//another menu object for submenu
CMenu *subMenu = new CMenu();
subMenu->CreatePopupMenu();
subMenu->AppendMenu(MF_STRING, ID_HIDE, _T("four"));
subMenu->AppendMenu(MF_STRING, ID_SHOW, _T("three"));
//append submenu to menu
menu->AppendMenu(MF_POPUP|MF_STRING, (UINT)subMenu->m_hMenu,  _T("Advanced") );
SetMenu(menu);
Run Code Online (Sandbox Code Playgroud)