一、添加Menu
1.1新建Menu
资源视图->XX.rc文件,右键->添加资源->Menu->新建,输入相应文字即可。
1.2插入Menu
主对话框中->属性->Menu中选择创建的Menu。
注意:对话框会自动增加要显示menu的空间,故设计的时候不用考虑留出空间。
二、编辑Menu
1.1更改ID
在资源视图的Menu文件夹中,选中Menu的名称,再点击属性,即可更改其ID
1.2分隔符
要在某一项之前显示分隔符,就右键那一项,选择‘插入分隔符‘即可。如要取消,则右键分隔符,选择删除。
1.3字母下划线
再要下划线的字母之前加一个&即可。(对汉字同样有效)
注意一个&,只能使一个字母显示下划线。
1.4添加事件处理函数
要添加的地方,右键->添加事件处理程序。
消息类型:一般为默认;
类列表:menu所添加的对话框所在的类,一般是CXXXXXXDlg;
函数处理程序名称:注意修改成易懂的;
1.5快捷键
①资源视图->右键,添加资源->Accelerator->新建
②给子菜单添加ID,右键子菜单,属性,修改ID
③在加速键的资源视图中,添加快捷键
④在***Dlg.h文件中新增public的HACCEL hAccel;
⑤在***Dlg.cpp的OnInitDialog函数中,增加
hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
其中IDR_ACCELERATOR1为你创建的Accelerator目录下的文件的名字。
⑥在类视图中,右键C***Dlg->类向导->虚函数->PreTranslateMessage->添加函数
⑦重写
if (::TranslateAccelerator(m_hWnd, hAccel, pMsg))
return true;
return CDialogEx::PreTranslateMessage(pMsg);
1.6菜单勾选(复选)
只能通过事件处理函数来实现
GetMenu //获取菜单句柄
GetMenuState //获取菜单状态
CheckMenuItem //设置菜单项选中状态
int m_state = GetMenu()->GetMenuState(ID_Top_Window, MF_CHECKED);//ID_Top_Window为菜单子项的ID
if (m_state == MF_CHECKED)//此时已勾选,再次点击时,应变为未勾选状态
{
GetMenu()->CheckMenuItem(ID_Top_Window, MF_UNCHECKED);
}
else
{
GetMenu()->CheckMenuItem(ID_Top_Window, MF_CHECKED);
}
1.7菜单单选
CMenu::CheckMenuRadioItem
BOOL CheckMenuRadioItem( UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags );
返回值:如果成功,则返回非零值,否则为0。
参数:
nIDFirst | 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的第一个菜单项的值。 | ||||||
nIDLast | 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的最后一个菜单项的值。 | ||||||
nIDItem | 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的被选中的菜单项的值。 | ||||||
nFlags | 以下列方式指定nIDFirst, nIDLast或nIDItem的解释:
|
为1、2、3、4更改ID号,1:ID_as.2:ID_sd.3:ID_df.4:ID_fg
为每个菜单子项添加事件处理程序。
为1添加函数:
GetMenu()->CheckMenuRadioItem(ID_as, ID_fg, ID_as, MF_BYCOMMAND);
为2添加函数:
GetMenu()->CheckMenuRadioItem(ID_as, ID_fg, ID_sd, MF_BYCOMMAND);