如果你不知道怎么用菜单类为对话框创建菜单,那么你就不算掌握了MFC
通过菜单编辑器,用户可以方便地设计菜单;通过类向导也可以直接编写菜单项的命令处理函数。那么,如何在程序中动态地创建菜单并相应其命令呢?
1、创建一个菜单,步骤如下:
1.1、在对话框中定义一个菜单对象,调用CreateMenu方法创建菜单资源。
1.2、调用AppendMenu或InsertMenu方法创建菜单项,设置菜单文本和ID命令。
2、为菜单项关联命令消息处理函数,具体步骤如下:
2.1、在对话框类中添加一个消息处理函数。
2.2、在对话框类的消息映射部分添加ON_COMMAND消息映射宏,将菜单项的命令ID与自定义的消息处理函数相关联。
实例如下:
1、创建一个基于对话框的MFC应用程序。命名为Exam1
2、在主窗口类Exam1Dlg.cpp中定义一个菜单成员变量。
CMenu m_Menu;
3、在Resource.h中定义两个菜单的消息命令。
#define ID_MENUHELP 35610
#define ID_MENUTELL 35611
4、在主窗口的头文件Exam1Dlg.h中添加消息处理函数:
afx_msg void help(); //这里是先声明help()响应函数,下同
afx_msg void tell();
5、在主窗口的源文件ExamDlg.Cpp中编写上面创建的两个函数的实现:
void Exam1Dlg::help()
{
MessageBox("帮助命令","提示");
}
void Exam1Dlg::tell()
{
MessageBox("介绍命令","提示");
}
6、在Exam1Dlg.cpp的消息映射部分添加命令消息映射宏,将菜单项的ID和对应的消息处理函数关联。
7、在主窗口Exam1Dlg.cpp中的OnInitDialog方法中编写代码,创建菜单项。
// TODO: Add extra initialization here
m_Menu.CreateMenu();
m_Menu.AppendMenu(MF_STRING,-1,"关于软件");
CMenu subMenu;
subMenu.CreatePopupMenu();
subMenu.AppendMenu(MF_STRING,ID_Help,"帮助");
subMenu.AppendMenu(MF_STRING,ID_Tell,"介绍");
m_Menu.AppendMenu(MF_POPUP,(UINT)subMenu.m_hMenu,"提示");
subMenu.Detach();
SetMenu(&m_Menu);
return TRUE; // return TRUE unless you set the focus to a control
8、运行如下: