11.12响应组合键与全局热键
来源:互联网 发布:直播hdp软件下载 编辑:程序博客网 时间:2024/06/06 16:00
#define IsKeyPressed(nVirtKey) ((GetKeyState(nVirtKey) & (1<<(sizeof(SHORT)*8-1))) != 0)#define IsKeyToggled(nVirtKey) ((GetKeyState(nVirtKey) & 1) != 0)//例如Caps LOCK键
//用 PreTranslateMessage 的方法,判断 Ctrl+Q 是否同时按下:
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsKeyPressed(VK_CONTROL)) { AfxMessageBox("Ctrl + Q 组合键被按下"); return TRUE;}
②、通过载入快捷键资源,并建立快捷键与消息映射的方法来实现:
1> 添加快捷键资源;
2> 修改快捷键资源中的组合键配置;
3> 添加响应函数声明,格式为:afx_msg void OnCtrlW();
4> 添加消息映射,格式为:ON_BN_CLICKED(ID_ACC_1, OnCtrlW) 或者 ON_BN_CLICKED(ID_ACC_1, &CMFCTestDlg::OnCtrlW)
5> 添加响应函数的实现:
void CMFCTestDlg::OnCtrlW()
{
MessageBox(_T("您按下了 Ctrl+W 键!"));
}
6> 初始化快捷键资源;//添加到初始化函数中
hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));
7> 在 PreTranslateMessage 函数中进行拦截处理:
switch(pMsg->message){case WM_KEYDOWN:case WM_SYSKEYDOWN: // Alt、F10 键 if(TranslateAccelerator(m_hWnd, hAcc, pMsg)) return TRUE;}
③、两种方法的比较:
第一种方法比较直接,使用方便,但一般只应用于快捷键比较少的程序;
第二种方法比较实用,虽然实现起来代码量稍微大一些,但是适用于快捷键比较多的程序中;
④、弊端:只在程序为当前活动窗口的时候有效,最小化、非活动窗口时无效!
解决方法:注册全局系统热键
①、注册全局系统热键的优点:
即使程序的窗口不是当前活动窗口、或者窗口最小化、隐藏后,也都可以响应热键;
比如QQ软件的默认呼出热键:Ctrl+Alt+Z 就是注册了全局系统热键;
②、注册窗口全局系统热键的步骤:
1> 调用 RegisterHotKey 函数注册全局系统热键;
BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);
hWnd : 指定响应该热键的窗口句柄;
id : 热键的标识,有点类似于 SetTimer 中的标识,作用域为线程内;
fsModifiers : 指定组合键,这个值可以由 MOD_ALT、MOD_CONTROL、MOD_SHIFT、MOD_WIN 中的一个或几个组成;
vk : 指定热键的虚拟键盘码,如:'A'
备注:这里的 Ctrl+Alt+A 这个组合键的作用域是全局的;
示例:RegisterHotKey(m_hWnd, 1000, MOD_CONTROL|MOD_ALT, 'Q');
2> 响应目标窗口的 WM_HOTKEY 消息;//也可以重写对话框的PreTranslateMessage函数 WM_HOTKEY
3> 调用 UnregisterHotKey 卸载热键:
BOOL UnregisterHotKey(
HWND hWnd,
int id
);
hWnd : 热键关联的窗口句柄;
id : 热键的标识;
可以放到对话框类的 OnDestroy() 函数中进行调用,这样模态与非模态对话框都可以成功的进行卸载;
- 11.12响应组合键与全局热键
- 第九节 组合热键与注册全局热键
- C#全局热键设置与窗体热键设置实例
- 【转载】C#窗体热键与全局热键设置
- 全局热键
- 全局热键
- 全局热键
- C#实现全局快捷键(系统热键)响应(转)
- C#实现全局热键响应,失去焦点情况下响应全局快捷键的方法
- C#实现全局热键响应,失去焦点情况下响应全局快捷键的方法
- Android TV热键(快捷键、组合键)实现
- MFC--快捷键(组合键/热键)与按钮实现操作按钮的方法
- MFC--快捷键(组合键/热键)与按钮实现操作按钮的方法
- MFC--快捷键(组合键/热键)与按钮实现操作按钮的方法
- Qt 全局热键 QxtGlobalShortcut 分析与使用举例
- Qt 全局热键 QxtGlobalShortcut 分析与使用举例
- Winform程序全局热键与局部热键(键盘快捷键的捕获)
- 添加全局热键
- 通过ADS1.2编写LED点灯程序
- 白话C#:特性
- hdu 2454 Degree Sequence of Graph G
- setsockopt设置socket状态
- 做程序好难
- 11.12响应组合键与全局热键
- 利用ant和XDOCLET生成Hibernate3配置文件和映射文件的BUILD.XML
- python 中Sets浅析
- MYSQL常用命令
- Java关键字final、static使用总结
- 一起来学REST(1)——什么是REST
- 省公司字公司数据
- 文件下载的简单代码
- sql 时间计算