面朝大海,春暖花开

作者:xiaokcehui2016-1-10 19:53分类: others 标签: VS2010 快捷键

VS MFC 菜单 添加快捷键


①.资源视图点右键->添加资源->Accelerator

 

②.Accelerator与要绑定的菜单ID一致,这个菜单是总菜单的ID,不是某一子菜单项

 

③.在Accelerator里面设置快捷键,ID为对应的子菜单ID

 

④.在对话框类 C***Dlg.h文件,类定义中加入变量HACCEL hAccel;


 

在C***Dlg.cpp文件中的OnInitDialog()函数,添加一句:

hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(菜单资源ID));我这里的ID是MENU。

 

⑤.类视图->选定对话框类->下方的属性选项卡->上方的重写选项卡->找到PreTranslateMessage->右方的下拉框<添加>PreTranslateMessage


 

⑥.系统自动跳转到PreTranslateMessage(MSG* pMsg)函数,添加:

   if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
        return   true;


⑦.编写子菜单的响应函数:子菜单上点右键->添加事件处理程序->消息类型:COMMAND;类列表:选好指定的类

 

一种是直接与菜单项关联的加速键;另一种就是自定义的加速键.

第一种:首先在资源文件Accelerator中添加快捷键资源 ID选择你要关联菜单项的名称然后再设置你的快捷键.什么?下一步?在.h文件中加入一个 HACCEL hAccel;变量然后在OnInitDialog或初始化中加入hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN));后面的参数改成加速键的资源文件名.
最后在PreTranslateMessage(MSG*pMsg) 中加入:
if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
 return true;

这样以后只要在Accelerator资源文件中添加快捷键就可以了
注意:添加快捷键的名字一定要与菜单名称一样这样才能响应.现在只需要在此菜单项中加入OnCommand消息的处理就可以了.


第二种:还是在资源文件Accelerator中添加快捷键资源 ID自己定义一个.然后再设置你的快捷键.下一步...就是在.h文件中定义一个快捷键对象
HACCEL m_hAccel;
然后在.cpp文件中初始
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
 IDR_ACCELERATOR1为你的加速资源名称.注意不是刚刚定义的加速键ID.

再添加PreTranslateMessage消息处理在里面加入以下代码:
 //保存快捷键被启用
if(m_hAccel != NULL)
 {
 if (TranslateAccelerator(m_hWnd, m_hAccel, pMsg))

 return TRUE;

 }
再添加OnCommand消息处理加入以下代码:
//响应加速键
switch(LOWORD(wParam))
 {
 case SHOW_DIAL0G: //加速键ID
 //...添加处理语句
break;
 case SHOW_DIALOG_02: //加速键ID
 //...添加处理语句
break;

 }

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

已有 0/545 人参与

发表评论:

欢迎使用手机扫描访问本站,还可以关注微信哦~