MFC注册热键

注册热键. 当用户点击注册的快捷键时,做出相应的响应.

定义 ALT+M键为测量按钮响应函数:

  1. 头文件中定义:
#define ID_HOTKEY1    10001 
  1. 在初始化函数中加入注册热键函数:
    if(false == RegisterHotKey(this->GetSafeHwnd(),ID_HOTKEY1,MOD_ALT,'M')  )    //VK_F1:F1响应
    {
        AfxMessageBox("遥控器注册热键失败!");
    }  
  1. 重写对话框中响应热键的消息: 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)  
  1. 在析构函数中编写解除热键响应
 UnregisterHotKey(this->GetSafeHwnd(), ID_HOTKEY1);

这里,我是手动注册的WM_HOTKEY消息响应函数,所以传参和不一样. 如果你是使用类向导创建消息响应,那么你的响应函数为:

void CMFC_TESTDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
    //nHotKeyId 和 ID_HOTKEY1 相对应 
    //nKey2 和 'M'对应
    //多个对应是为了响应你可能需要多个组合快捷键
}


另外可参考下面这篇文章:

MFC-注册热键

原文地址:https://www.cnblogs.com/skyhuangdan/p/5522819.html