对于mfc的添加热键的文章已经有很多了,我这里就简单的说一下并且说一些可能出的错误

首先在资源文件中添加ACCELERATOR
然后在资源文件下的RC中找到ACCELERATOR的节点,打开后可以发现一个IDR_ACCELERATOR1
打开IDR_ACCELERATOR1,按tab键切换到选择ID列表,这里是选择你要添加哪个控件为快捷键,
然后在切换到修饰符,这里是选择你是否要使用组合键,如CTRL,CTRL+SHIFT,等等
然后在切换到键列表,这里选择你要添加的快捷键,也可以自行输入按键字符,按键的ASCII码,或虚拟键值
在切换到类型,这里是选择你的快捷键是使用ASCII模式还是vk模式
全部设置完成后保存,然后去对话框头文件中建立一个成员变量
HACCEL hotkeytab;
这里hotkeytab是变量名
添加玩成之后,去相应的对话框的CPP文件中的OnInitDialog函数中添加
hotkeytab = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
IDR_ACCELERATOR1为热键ID,
添加完成之后,进入类视图,找到对话框所对应的类,打开类向导,选项卡切换到虚函数,在虚函数列表中找到PreTranslateMessage
然后点击添加函数,
在点击编辑代码
进入代码编辑后在函数中添加如下代码
if (WM_KEYFIRST <= pMsg->message&&pMsg->message <= WM_KEYLAST) {
HACCEL hAccel = hotkeytab;
if (hAccel && TranslateAccelerator(m_hWnd, hAccel, pMsg)) {
return TRUE;
}
}
之后,运行程序,试一试你添加的快捷键吧!

注意事项:
在头文件中添加的热键变量一定要是成员变量
一定要在相应对话框下的OnInitDialog中加载热键
一定要在相应的对话框类中重载PreTranslateMessage函数,,我之前添加玩之后发现编译总是通不过,说是hotkeytab是未定义和未声明的标识符,起初没有注意到虚函数的问题,后来才偶然发现重载函数重载成其他类的了。

提示:如果要添加更多的快捷键,按照上述过程在添加一遍即可,但在PreTranslateMessage函数中只需做一些改动。如我创建了另一个快捷键变量HACCEL hotkeycancel;
在PreTranslateMessage函数中只需要改为:
if (WM_KEYFIRST <= pMsg->message&&pMsg->message <= WM_KEYLAST) {
HACCEL hAccel = hotkeytab;
HACCEL haccelcancel=hotkeycancel;
if (hAccel && TranslateAccelerator(m_hWnd, hAccel, pMsg)) {
return TRUE;
}
if (hotkeycancel && TranslateAccelerator(m_hWnd, hotkeycancel, pMsg)) {
return TRUE;
}
}

注:由于本人是个盲人的缘故,一些操作方式可能更适合盲人群体,有什么描述不详的地方敬请见谅!!!

关于mfc添加热键的更多相关文章

  1. MFC 添加C++类,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数;

    MFC 添加C++类,不用定义C++类的对象,别的类不通过C++类的定义的对象就可以直接调用C++类里面的成员函数: 1先在mfc程序中添加普通类CProdata,然后删除头文件Prodata.h里面 ...

  2. MFC添加自定义消息

    由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下: 本文基于vs2008下通过线程实现数据实时更新的对话框运用程序 1. 定义消息(Resource.h文件中): 由于很多新控件 ...

  3. VS MFC 添加菜单

    新建出来的基于对话框的MFC工程是没有菜单的,如何在对话框中添加菜单?又如何给菜单的菜单项添加事件应用响应?下面小编来具体描述一下,希望能帮助到一些人. 工具/原料   电脑一台 VS2010 方法/ ...

  4. MFC 添加文件路径 遍历文件

    .添加MFC选择文件路径,使用MessageBox显示信息. void CMyCalLawsDlg::OnBnClickedAddfolder() { wchar_t* p; wchar_t szPa ...

  5. MFC添加鼠标相应事件

    Class View (类视图)窗口中选中 你要添加事件的类(比如C***View.CPP),切换到properties窗口. 点击上面的Message图标(在Event图标[一个闪电形状的图标] 右 ...

  6. mfc添加气球式提示栏

    //    TOOLTIPWND.H  添加气球式提示栏 #if !defined(AFX_TOOLTIPWND_H__2C52D3E4_2F5B_11D2_8FC9_000000000000__IN ...

  7. MFC添加背景图片三种方法

    方法一: 1.声明成员变量CBrush m_brush;2.在InitDialog中添加代码: ? CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1);  //IDB_B ...

  8. C++添加热键和捕获组合键

    一.热键注册 步骤一:声明一个全局量int hotkeyId=1: 步骤二:窗体创建的时候注册: int result= RegisterHotKey(this->GetHWND(), hotk ...

  9. MFC 添加背景图片并让控件背景透明

    /*添加背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnEraseBkg ...

随机推荐

  1. hdu 4091 数学思维题贪心

    /* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...

  2. android 上AES解密是报错javax.crypto.BadPaddingException: pad block corrupted

    网上看到两种方法: 1.SecretKeySpec skeySpec = new SecretKeySpec(getRawKey(key), "AES"); private sta ...

  3. [TJOI2010]中位数

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...

  4. P1996||T1282 约瑟夫问题 洛谷||codevs

    https://www.luogu.org/problem/show?pid=1996||http://codevs.cn/problem/1282/ 题目背景 约瑟夫是一个无聊的人!!! 题目描述 ...

  5. cogs——1364. 聚会

    1364. 聚会 ★   输入文件:partyb.in   输出文件:partyb.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小S想要从某地出发去同学k的家中参加 ...

  6. 创建简单的spring-mvc项目

    1.第一步:创建项目 new—>Dynamic Web Project 项目创建成功后,展示如图: 2.第二步:导入springmvc的jar包和common-logging.jar 3.第三步 ...

  7. spring-kafka

    spring-kafka 使用spring-kafka的小伙伴,看过来. 说明 因为spring-kafka封装的比较厉害,可能跟你实际使用起来有很大的差别. 一个简单的消费例子 在spring-bo ...

  8. Servlet表单数据处理

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/form-data.html: 当需要从浏览器到Web服务器传递一些信息并最终传回到后台程序时,一 ...

  9. [React] Prevent Unnecessary Rerenders of Compound Components using React Context

    Due to the way that React Context Providers work, our current implementation re-renders all our comp ...

  10. C语言++a与a++的实现机制与操作符结合优先级

    看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出推断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...