......
ON_MESSAGE(WM_HOTKEY,OnHotKey) //手动加入
END_MESSAGE_MAP()3、消息处理函数的实现LRESULT CWndSnapDlg::OnHotKey(WPARAM wParam,LPARAMlParam)
{//wParam是注册热键的ID,lParam是关于按键的信息
if(wParam==1000)
{
.........}......
return0;
}4、在初始化时进行热键注册注册热键的函数原型如下:
BOOL RegisterHotKey( HWND hWnd, // handle to window int id, // hot key identifier UINT fsModifiers, // key-modifier options UINT vk // virtual-key code);
例如要注册热键Ctrl+Shift+A,则注册代码如下:
RegisterHotKey(m_hWnd,1000,MOD_CONTROL | MOD_SHIFT,'A');
5、热键的注销
在程序退出之前要记着注销这些注册热键,注销热键的函数如下:
BOOL UnregisterHotKey( HWND hWnd, // handle to window int id // hot key identifier);
则注销上面注册的热键Ctrl+Shift+A的代码为:
UnregisterHotKey(m_hWnd,1000);
二、需要注意的问题
1、我一开始编这个程序的时候,每次按下Ctrl+Shift+A时,消息处理函数OnHotKey(WPARAM wParam,LPARAM lParam)确实被调用了,但是wParam和lParam两个参数传进来的值却总是不对,后来才发现,是我在声明消息处理函数时,在函数前面加上了CALLBACK这个调用约定。所以,一定要注意,千万不要加调用约定修饰。
2、我看很多资料都说如果注册热键Ctrl+Shift+A和Ctrl+Shift+a的话,只要在上面的基础上多加一个注册函数即可:
RegisterHotKey(m_hWnd,2000,MOD_CONTROL | MOD_SHIFT,'a');
但是我在调试的时候发现,不管按下的是Ctrl+Shift+A还是Ctrl+Shift+a,消息处理函数传入的wParam这个参数始终是1000,而且,当我把注册Ctrl+Shift+a的代码删掉时,现象和以前一样。经过不断的调试,我发现,只要注册了包含大写字母的热键后,在运行时按下小写字母的按钮时同样实现按下大写字母时的功能,而且,注册时必须注册大写字母,如果只注册包含小写字母的热键是没有用的。