C++/MFC-Menu

一、添加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的解释:
nFlags解释
MF_BYCOMMAND指定参数给出已存在菜单项的命令ID号。若没有设置MF_BYCOMMAND或MF_BYPOSITION,那么该值为缺省值
MF_BYPOSITION指定参数给出已存在菜单项的位置。第一项在位置0


为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);















  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值