win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY…
2018-06-17 21:46:21来源:未知 阅读 ()
windows给我们提供了一个对话框控件HotKey非常好用,在设置热键的时候用起来很爽,但是一直百度就是没找到在win32下怎样通过消息获取这个控件里面的内容,找到的都是用MFC封装好的控件类来操作的,终于在MSDN找到了答案…
翻译过来就是要给控件发送这个消息 HKM_GETHOTKEY 头文件:Commctrl.h
// IDC_HOTKEY_SETTING 这个是热键控件的ID SendMessage(GetDlgItem(hDlg, IDC_HOTKEY_SETTING), HKM_GETHOTKEY, 0, 0);
返回值是得到的组合键值
Returns the virtual key code and modifier flags. The LOBYTE of the LOWORD is the virtual key code of the hot key. The HIBYTE of the LOWORD is the key modifier that specifies the keys that define a hot key combination. The modifier flags can be a combination of the following values.
翻译过来就是得到的数低16位有效,然后在这低16位中,低8位存的是虚拟键值(virtual key ),高8位是修饰键值(modifier)
virtual key 就是宏定义为VK_SPACE 等等这些,字母就是它的ASC码
modifier 看下面
Value Meaning
HOTKEYF_ALT ALT key
HOTKEYF_CONTROL CONTROL key
HOTKEYF_EXT Extended key
HOTKEYF_SHIFT SHIFT key
即这样使用
DWORD dwVal; dwVal = SendMessage(GetDlgItem(hDlg, IDC_HOTKEY_SETTING), HKM_GETHOTKEY, 0, 0); UINT uVk = LOBYTE(LOWORD(dwVal)); UINT uMod = HIBYTE(LOWORD(dwVal));
可以直接发送 HKM_SETHOTKEY 消息把得到的值传给 wParam 就可以设置控件框的内容了
如果要用得到的值注册热键,则需要进行转换,因为 HOTKEYF_ALT 和 RegisterHotKey 的参数 MOD_ALT 值是不一样的
#define MOD_ALT 0x0001 #define MOD_CONTROL 0x0002 #define MOD_SHIFT 0x0004 //------------------------------------- #define HOTKEYF_SHIFT 0x01 #define HOTKEYF_CONTROL 0x02 #define HOTKEYF_ALT 0x04
需要进行转换
UINT HotkeyToMod(UINT fsModifiers) { if ((fsModifiers & HOTKEYF_SHIFT) && !(fsModifiers & HOTKEYF_ALT)) // shift转alt { fsModifiers &= ~HOTKEYF_SHIFT; fsModifiers |= MOD_SHIFT; } else if (!(fsModifiers & HOTKEYF_SHIFT) && (fsModifiers & HOTKEYF_ALT)) // alt转shift { fsModifiers &= ~HOTKEYF_ALT; fsModifiers |= MOD_ALT; } return fsModifiers; } UINT ModToHotkey(UINT fsModifiers) { if ((fsModifiers & MOD_SHIFT) && !(fsModifiers & MOD_ALT)) // shift转alt { fsModifiers &= ~MOD_SHIFT; fsModifiers |= HOTKEYF_SHIFT; } else if (!(fsModifiers & MOD_SHIFT) && (fsModifiers & MOD_ALT)) // alt转shift { fsModifiers &= ~MOD_ALT; fsModifiers |= HOTKEYF_ALT; } return fsModifiers; } uMod = HotkeyToMod(uMod); if (!RegisterHotKey(g_hWnd, HOTKEY_SHOT, uMod, uVk)) { MessageBox(hDlg, L"注册热键失败,可能发生冲突", L"Error", MB_OK); break; }
上面转换的代码来自http://blog.csdn.net/wwkaven/article/details/44119059
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PC微信获取登录二维码 2020-05-18
- C++常见编程--获取当前系统时间 2020-02-25
- 51.Qt-使用ajax获取ashx接口的post数据 2019-12-23
- LeetCode380 常数时间插入、删除和获取随机元素 2019-09-08
- 多线程学习:win32多线程编程基本概念(转) 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash