简介:
简单的说就是全局快捷键,你的程序启动后注册热键到指定窗口,以后如果用户按下你注册的热键,你的指定窗口就会收到WM_HOTKEY消息通知,进而进行处理。
使用起来只有三个步骤:
1.注册热键
2.在WM_HOTKEY通知中进行逻辑处理
3.解除注册热键
API介绍:
(具体消息参数含义,详细介绍等可以去msdn官网查看https://msdn.microsoft.com/en-us/library/ms646309.aspx)
注册热键
BOOL RegisterHotKey(
HWND hWnd, //响应该热键的窗口句柄,如果为空,则注册到调用线程上
Int id, //该热键的唯一标识
UINT fsModifiers, //该热键的辅助按键
UINT vk //该热键的键值
);
解除注册热键
BOOL WINAPI UnregisterHotKey(
_In_opt_ HWND hWnd,//热键注册的窗口
_In_ int id//要解除注册的热键ID
);
详细使用步骤:
新建一个基本对话框,直接完成
注册热键
BOOL CXXDlg::OnInitDialog()
{
......
......
RegisterHotKey(GetSafeHwnd(),WM_MYHOTKEY,MOD_CONTROL|MOD_ALT,'X');
//这里定义的快捷键是"Alt+Ctrl+X"
return true;
}
添加消息映射
(a)定义响应函数
在XXDlg.h中
class CXXDlg : public CDialog
{
.......
......
afx_msg HRESULT OnHotKey(WPARAM wParm,LPARAM lParam);
//这里使用函数OnHotKey,名字可随便改,但格式是固定的
DECLARE_MESSAGE_MAP()
}
(b)捆绑消息
在XXDlg.cpp中
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
ON_WM_SYSCOMMAND()
.......
.......
ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
WM_HOTKEY是系统定义的热键消息,OnHotKey是所要调用的函数
编写响应函数
在XXDlg.cpp中最后添加
HRESULT CXXDlg::OnHotKey(WPARAM wParm,LPARAM lParam)
{
if (wParm==WM_MYHOTKEY)
{
CString str;
str.Format("ID:%d lParam:%08x h:%x l:%x",
wParm,lParam,HIWORD(lParam),LOWORD(lParam));
AfxMessageBox(str);
}
return true;
}
//这里只是将一些信息显示处理,想干什么可以自己改
注销消息
使用类向导(MFC ClassWizard)添加DestroyWindow消息
添加函数
BOOL CXXDlg::DestroyWindow()
{
UnregisterHotKey(GetSafeHwnd(),WM_MYHOTKEY);
return CDialog::DestroyWindow();
}