Bootstrap

MFC 实现菜单功能

一、在项目的资源视图中添加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;
	}
}

;