注册热键. 当用户点击注册的快捷键时,做出相应的响应.
定义 ALT+M键为测量按钮响应函数:
- 头文件中定义:
#define ID_HOTKEY1 10001
- 在初始化函数中加入注册热键函数:
if(false == RegisterHotKey(this->GetSafeHwnd(),ID_HOTKEY1,MOD_ALT,'M') ) //VK_F1:F1响应 { AfxMessageBox("遥控器注册热键失败!"); }
- 重写对话框中响应热键的消息: WM_HOTKEY
LRESULT AutoTrackerDlg::OnHotKey( WPARAM wParam,LPARAM lParam ){ UINT Mod = (UINT) LOWORD(lParam); // key-modifier flags UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code //判断响应了什么热键 if (MOD_ALT == Mod && 'M' == uVirtKey) { //AfxMessageBox(_T("你按下了热键")); OnBnClickedButtonMeasure(); } return 0; }
其中除了去重载消息外,还可以自己数响应WM_HOTKEY按钮,在BEGIN_MESSAGE_MAP中加入:
ON_MESSAGE(WM_HOTKEY,OnHotKey)
- 在析构函数中编写解除热键响应
UnregisterHotKey(this->GetSafeHwnd(), ID_HOTKEY1);
这里,我是手动注册的WM_HOTKEY消息响应函数,所以传参和不一样. 如果你是使用类向导创建消息响应,那么你的响应函数为:
void CMFC_TESTDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2){ //nHotKeyId 和 ID_HOTKEY1 相对应 //nKey2 和 'M'对应 //多个对应是为了响应你可能需要多个组合快捷键}
另外可参考下面这篇文章: