MFC-注册热键
0、测试环境
VS2015专业版,基于对话框的MFC程序,
例子地址:http://pan.baidu.com/s/1qX9IRec
1、MFC工程设置
类向导->消息->WM_HOTKEY->添加处理程序->确定或编辑代码
执行后MFC工程会生成下面的代码
//-------------------MFC_TESTDlg.h afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2); //声明消息处理函数 //-------------------MFC_TESTDlg.cpp
ON_WM_HOTKEY() //消息映射宏,绑定消息与相应处理函数 void CMFC_TESTDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2) //实现消息处理函数
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
2、添加热键注册/取消代码
2.1、热键注册/取消API
//Defines a system-wide hot key.
BOOL WINAPI RegisterHotKey(//https://msdn.microsoft.com/en-us/library/ms646309(v=vs.85).aspx
_In_opt_ HWND hWnd, //接收热键触发事件的窗口句柄
_In_ int id, //热键的ID,应用程序ID范围 [0x0000,0xBFFF].DLL范围[0xC000~0xFFFF]
_In_ UINT fsModifiers, //声明组合键中的 Alt(MOD_ALT)、Ctrl(MOD_CONTROL)、Shift(MOD_SHIFT)、Win键(MOD_WIN)、MOD_NOREPEAT 或者其组合
_In_ UINT vk //普通按键的代码(例如'A'),其他见https://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
); //Frees a hot key previously registered by the calling thread.
BOOL WINAPI UnregisterHotKey(//https://msdn.microsoft.com/en-us/library/ms646327(v=vs.85).aspx
_In_opt_ HWND hWnd, //接收热键触发事件的窗口句柄
_In_ int id //热键的ID
2.2、API使用举例
热键的注册可以放在OnInitDialog()函数或者WM_CREATE事件处理函数中,取消注册可以放在WM_DESTROY事件处理函数中。
//WM_CREATE Event Proc Handler
int CMFC_TESTDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -)
return -; // TODO: 在此添加您专用的创建代码
//注册热键 Ctrl + S(s)
RegisterHotKey(this->GetSafeHwnd(), , MOD_CONTROL, 'S');
RegisterHotKey(this->GetSafeHwnd(), , MOD_CONTROL, 's');
//注册热键 Ctrl + F1(不重复,不会连续收到多次)
RegisterHotKey(this->GetSafeHwnd(), , MOD_CONTROL | MOD_NOREPEAT, VK_F1);
return ;
} //WM_DESTROY Event Proc Handler
void CMFC_TESTDlg::OnDestroy()
{
CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码
//解除热键注册
UnregisterHotKey(this->GetSafeHwnd(), );
UnregisterHotKey(this->GetSafeHwnd(), );
UnregisterHotKey(this->GetSafeHwnd(), );
}
3、修改热键处理函数
void CMFC_TESTDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nHotKeyId) {
case :
case :
//proc Ctrl + S here
break;
case :
//proc Ctrl + F1 here
break; default:
break;
} CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
----------------------------------------------
参考资料:
http://blog.csdn.net/wangjieest/article/details/6910166
MSDN
MFC-注册热键的更多相关文章
- MFC注册热键
注册热键. 当用户点击注册的快捷键时,做出相应的响应. 定义 ALT+M键为测量按钮响应函数: 头文件中定义: #define ID_HOTKEY1 10001 在初始化函数中加入注册热键函数: if ...
- RegisterHotKey注册热键,然后响应WM_HOTKEY消息
MSDN中的一个示例代码,步骤就是RegisterHotKey注册热键,然后响应WM_HOTKEY消息 @1:这个是系统热键 #include "stdafx.h" int _cd ...
- delphi注册热键方法(一)
uses windows,menus; ..... //声明 HotKey_Key: Word; HotKey_Shift: Word; procedure WMHotKey(var msg : Tm ...
- 【WinForm程序】注册热键快捷键切换
重写DefWndProc事件 #region Window 消息捕获 const int WM_COPYDATA = 0x004A; public struct COPYDATASTRUCT { pu ...
- WPF注册热键后处理热键消息(非winform方式)
由于最近在做wpf版的截图软件,在处理全局热键的时候,发现国内博客使用的都是winform窗体的键盘处理方式,此方式需要使用winform的动态库,如此不协调的代码让我开始在github中寻找相关代码 ...
- WinForm和WPF中注册热键
由于.Net没有提供专门的类库处理热键,所以需要直接调用windows API来解决. HotKey为.NET调用Windows API的封装代码,主要是RegisterHotKey和Unregist ...
- qt 注册热键
原文 将所需的库添加到您的qmake项目(.PRO文件) LIBS += \ -lUser32 2.在代码中包含所需的头文件. #include <windows.h> 在程序开始时注册热 ...
- MFC 给对话框注册热键
在头文件中添加: //}}AFX_MSGafx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//(此行为加入的)BEGIN_MESSAGE_MA ...
- MFC注册窗口类以及FindWindow按窗口类名查询
很多玩游戏的人都知道一般游戏客户端程序是不允许双开的,就是说在同一游戏在启动的时候,是无法打开多个窗口.很多其他软件如酷狗播放器等也是这样.如果把打开的窗口最小化,这时重新启动程序,最小化的窗口会被显 ...
- MFC注册表操作
注册表简介 有时程序中要存些设置信息,一个方法就是创建一些普通的txt或xml文件,然后保存进去就行了.另一办法就是保存到注册表里.注册表是由windows维护的一个小数据库.里面也会保存window ...
随机推荐
- Redis主从配置和哨兵监控配置——服务器端环境搭建
一:介绍 公司用到的redis框架,主要分为cluster的缓存集群和sentinel中的哨兵主从.这种的选用方式一般需要更具业务场景来做区分,两种框架的配置图为:右图为哨兵主从框架和cliuster ...
- eclipse 包 取消代码第一行package包名 自动补全时取消自动引入包名 修改名字 取消引用 自动导入publilc static void main(String[] args) {}
--项目 --包 包是为了管理类文件,同个包下不允许同名类文件,但不同包就可以,把类放在包里是规范 (https://zhidao.baidu.com/question/239471930532952 ...
- Django web编程2 -- 编辑页面内容
你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习Django如何防范对基于表单的网页发起的常见攻击,这让你无需花太多时间考虑确保应用程序安全的问题. 然后,我们将实现一个用户 ...
- Vue学习笔记三:v-bind,v-on的使用
目录 v-bind:绑定属性值,内容相当于js,缩写: v-on:绑定方法,缩写@ 总结 v-bind:绑定属性值,内容相当于js,缩写: 我添加了一个input标签,如下 <input typ ...
- DirectX11--深入理解与使用缓冲区资源
前言 在Direct3D 11中,缓冲区属于其中一种资源类型,它在内存上的布局是一维线性的.根据HLSL支持的类型以及C++的使用情况,缓冲区可以分为下面这些类型: 顶点缓冲区(Vertex Buff ...
- C#代码使用Process类调用SWFTools工具
一.Process类调用SWFTools工具将PDF文档转为swf文档 1 string cmdStr = "D:\\SWFTools\\pdf2swf.exe"; string ...
- mui框架中dialog框的实现
<script type="text/javascript" charset="utf-8"> //mui初始化 mui.init({ swipeB ...
- 如何识别Studio 5000程序开发版本号
前言:中.大型AB PLC的编程软件从以前的RSLogix 5000到目前的Studio 5000,都是有版本号的,如RSLogix 5000 V19.0.Studio 5000 V32.高版本的软件 ...
- Mysql查看登录用户以及修改密码和创建用户以及授权(转载)
本文转自(https://www.cnblogs.com/manzb/p/6491924.html) 1.mysql查看当前登录用户,当前数据库: select user(); select data ...
- 「HNOI 2019」白兔之舞
一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...