RegisterHotKey 热键的使用简介 简单的说就是全局快捷键 你的程序启动后注册热键到指定窗口 以后如果用户按下你注册的热键 你的指定窗口就会收到 WM HOTKEY 消息通知 进而进行处理 使用起来只有三个步骤 1 注册热键 2 在 WM HOTKEY 通知中进行逻辑处理 3 解除注册热键 API 介绍 具体消息参数含义 详细介绍等可以去 msdn 官网查看 https msdn microsoft com en
简介:
简单的说就是全局快捷键,你的程序启动后注册热键到指定窗口,以后如果用户按下你注册的热键,你的指定窗口就会收到WM_HOTKEY消息通知,进而进行处理。
使用起来只有三个步骤:
1.注册热键
2.在WM_HOTKEY通知中进行逻辑处理
3.解除注册热键
API介绍:
(具体消息参数含义,详细介绍等可以去msdn官网查看https://msdn.microsoft.com/en-us/library/ms.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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206333.html原文链接:https://javaforall.net