注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

VC 2010+MFC:CHotKeyCtrl无法处理Up、Down、Left、Right等按键的全局热键  

2011-04-23 16:06:26|  分类: vc界面编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
CHotKeyCtrl无法处理Up、Down、Left、Right等按键的全局热键

        按下Up、Down、Left、Right等键,CHotKeyCtrl::GetHotKey得到的modkey的值是MOD_WIN,Virtual Key虚拟键值是VK_UP等。使用RegisterHotKey注册全局热键,然后触发热键。但是,直接按上、下、左、右方向键,系统不会接收到任何热键信息!而如果按下Win键+上、下、左、右方向键,系统将给出Up、Down、Left、Right等热键!
        奇怪!而且,类似的情况还有数字小键盘!数字小键盘的虚拟键值完全是不正确的!

        感觉微软的这部分设计得有点乱。菜单/按钮快捷键、加速键、窗口热键、系统热键,等等。菜单/按钮快捷键比较简单,加上"&A",就可以设定A为快捷键;而加速键、窗口热键、系统热键则完全可以通用的,但是windows给我们的API参数却是三套接口。CreateAcceleratorTable加速键部分,采用了“FALT、FCONTROL”等;窗口热键部分,则使用“HOTKEYF_ALT、HOTKEYF_CONTROL”等;而全局热键则是“MOD_ALT、MOD_CONTROL”等!


CHotKeyCtrl应该和WM_SETHOTKEY组合使用!而不是和全局热键RegisterHotKey组合使用?

MSDN上面说:
Setting a Hot Key

Your application can use the information provided by a hot key ( CHotKeyCtrl) control in one of two ways:

  • Set up a global hot key for activating a nonchild window by sending a WM_SETHOTKEY message to the window to be activated.

  • Set up a thread-specific hot key by calling the Windows function RegisterHotKey.

     


解决!
(1)方向键的问题
过滤掉MOD_WIN,即可。
(2)小键盘的问题
关闭Numlock指示灯,即可。

By:zhanyonhu
  评论这张
 
阅读(1070)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016