一、在项目的资源视图中添加menu资源
选择menu
按需要填写菜单
二、给菜单绑定事件
取一个名字,点击添加,会跳转到该函数,在其中可以添加点击菜单想要实现的功能
三、在想要实现菜单功能的cpp中载入菜单资源
头文件中声明
CMenu m_menu;
在初始化函数中添加
m_menu.LoadMenu(IDR_MENU1) //IDR_MENU1是添加菜单时的id
SetMenu(&m_menu);//载入菜单资源
运行可以得到
四、动态添加菜单
在程序中实现按需添加菜单
方法1
CMenu* pMenu = GetMenu();
//获取第二个一级菜单
CMenu* towMenu = pMenu->GetSubMenu(1);
//添加一个二级菜单
UINT id = IDR_MENU2 +1;
towMenu->AppendMenu(MF_STRING,IDR_MENU2 +1 , TEXT("二级菜单1"));
//第一个参数MF_POPUP表示还可以给该项添加子菜单,MF_STRING表示不能在添加子项
towMenu->AppendMenu(MF_POPUP, (UINT_PTR)towMenu->GetSafeHmenu(), TEXT("二级菜单2"));
//添加三级菜单
CMenu* threeMenu = towMenu->GetSubMenu(2);
threeMenu->AppendMenu(MF_STRING,IDR_MENU2 +10 , TEXT("三级菜单"));
效果
方法二
自己绘制菜单添加到指定位置
CMenu subMenu;
subMenu.CreatePopupMenu();
subMenu.AppendMenuW(MF_STRING,IDR_MENU2 +2 , TEXT("三级菜单1"));
subMenu.AppendMenuW(MF_STRING,IDR_MENU2 +3 , TEXT("三级菜单2"));
//将这个subMenu添加到towMenu
towMenu->AppendMenu(MF_POPUP,(UINT_PTR)subMenu.GetSafeHmenu() , TEXT("二级菜单3"));
五、添加响应函数
resource.h中定义宏,id可以自己定,不要重复
#define IDR_MENU2 130
#define ID_START_RANGE 131
#define ID_END_RANGE 150
头文件中声明响应函数
afx_msg void OnCommand(UINT id);
添加消息映射
//单个ID
//ON_COMMAND(ID_MENU_ITEM_2, OnMenuItem2)
//范围ID
ON_COMMAND_RANGE(ID_START_RANGE, ID_END_RANGE, &CmyMenuDlg::OnCommand)
加入要实现的功能
void CmyMenuDlg::OnCommand(UINT id)
{
switch(id)
{
case id1:
//加入功能代码
break;
case id2:
break;
default:
break;
}
}