本文转载自http://blog.csdn.net/gxj1680/article/details/8198745
注:以下CHotKeyCtrl情况的环境是ATL,不知MFC中是否如此,没有验证,需注意
1. 某些情况下,不允许只输入一个不带fsModifiers只有VK键的情况下,可以使用m_editHotkey.SetRules(HKCOMB_NONE, HOTKEYF_CONTROL | HOTKEYF_ALT); //关键是HKCOMB_NONE参数
2. CHotKeyCtrl::SetHotKey和GetHotKey中的wModifiers和RegisterHotKey中的fsModifiers不同:
a. 从CHotKeyCtrl控件得到的Alt和Shift分别是HOTKEYF_ALT和HOTKEYF_SHIFT,而RegisterHotKey中的Alt和Shift则为MOD_ALT和MOD_SHIFT,所以GetHotKey之后,若要注册则需要进行转换
b . SetHotKey时,也需要调用相关的转换函数
b. 从HOTKEYF_SHIFT、HOTKEYF_ALT和MOD_SHIFT、MOD_ALT可以看出,Shift和Alt在CHotKeyCtrl中是相反的(获取的值是你想要的对方的值,不太好说,明白?)
3. 使用GetHotKey要注意,在某些情况下同一个wModifiers值缺得到了不同的值,如:Ctrl + Up和Ctrl + 'P'得到的wModifiers(Ctrl)值不同,当然Shift、Alt得到的值也不同,都比正常值大了0x1000,即HOTKEYF_EXT,所以在GetHotKey时要过滤其中的项,否则调用RegisterHotKey时,函数注册成功了,但没有响应