对于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. Bzoj3038 上帝造题的七分钟2 线段树

    Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1135  Solved: 509 Description XLk觉得<上帝造题的七分钟>不太 ...

  2. 关于jquery stopPropagation()阻止冒泡事件

    我们经常会遇到点击两个或者多个重叠的层事件的时候,往往点击最里的的一层会接连触发外面的点击事件.这时候就需要用到stopPropagation事件即阻止冒泡事件html代码如下<!DOCTYPE ...

  3. 关于变量__name__的理解

    __name__ 1. 基本含义 如果是放在Modules模块中,就表示是模块的名字: 如果是放在Classs类中,就表示类的名字: 2. 模块中的意义 这里重点说一下模块中的意义,这个用法在pyth ...

  4. Windows TAKEOWN & ICACLS

    TAKEOWN:takeown   /f 文件名              获取该文件的所属权takeown /f /r /d n 文件夹       获取整个文件夹及其下面子目录文件的所属权 TAK ...

  5. [Java Sprint] Spring Configuration Using Java

    There is no applicationContext.xml file. Too much XML Namespaces helped Enter Java Configuration Cre ...

  6. node-npm/yarn

    很多人对npm或yarn了解甚少吧,下面我介绍一下常用的yarn/npm所谓的包管理工具. 首先我先介绍一下,npm属于国外Google镜像(下载贼慢),yarn属于Facebook开发的. npm: ...

  7. YII数据流程浅析

    MVC就不解释,直接上代码分析数据流程: 数据库图: 模型部分介绍: <?php /* * 前两个方法必须写 * 继承自CActiveRecord类 这个类位于 \framework\db\ar ...

  8. Java中Comparator接口和Comparable接口的使用

    普通情况下在实现对对象元素的数组或集合进行排序的时候会用到Comparator和Comparable接口,通过在元素所在的类中实现这两个接口中的一个.然后对数组或集合调用Arrays.sort或者Co ...

  9. Windows 环境下运用Python制作网络爬虫

    import webbrowser as web import time import os i = 0 MAXNUM = 1 while i <= MAXNUM: web.open_new_t ...

  10. Python正則表達式小结(1)

    学习一段python正則表達式了, 对match.search.findall.finditer等函数作一小结  以下以一段网页为例,用python正則表達式作一个范例: strHtml = '''& ...