sghfxp 发表于 2014-9-3 09:30:25

MFC CHotKeyCtrl 快捷键

#define HOTKEY_OPEN_MSG      43210
CHotKeyCtrl   m_hotKeyOpenMsg;

WORD HKF2SDK(WORD mod)
{
   return ((mod & HOTKEYF_ALT) ? MOD_ALT : 0 ) | ((mod & HOTKEYF_CONTROL) ? MOD_CONTROL : 0) | ((mod & HOTKEYF_SHIFT) ? MOD_SHIFT : 0);
}

WORD SDK2HKF(WORD mod)
{
   return ((mod & MOD_ALT) ? HOTKEYF_ALT : 0) | ((mod & MOD_CONTROL) ? HOTKEYF_CONTROL : 0) | ((mod & MOD_SHIFT) ? HOTKEYF_SHIFT : 0);
}

//设置快捷键(hWnd 为设置快捷键的窗口句柄)
bool bRet;
DWORD dwHotKey;
WORD wVirtualKeyCode, wModifiers;
m_hotKeyOpenMsg.GetHotKey(wVirtualKeyCode, wModifiers);
wModifiers = HKF2SDK(wModifiers);
bRet = ::RegisterHotKey(hWnd, HOTKEY_OPEN_MSG, wModifiers, wVirtualKeyCode);
if(!bRet)
{
      MessageBox(L"Set HotKeyOpenMsg failed!");
}
else
{
      dwHotKey = (wModifiers << 16) + wVirtualKeyCode;
   CStringwszValue;
      wszValue.Format(_T("%ld"), dwHotKey);
       //此处可以将wszValue保存到文件中,以便下次加载
}

//加载上次保存的快捷键(wszValue为上次保存的快捷键的值)
bool bRet;
DWORD dwKey;
WORD wVirtualKeyCode, wModifiers;
dwKey = (DWORD)_wtol(wszValue);
wModifiers = dwKey >> 16;
wVirtualKeyCode = (WORD)dwKey;
bRet = ::RegisterHotKey(hWnd, HOTKEY_OPEN_MSG, wModifiers, wVirtualKeyCode);
if(!bRet)
       MessageBox(L"Set HotKeyOpenMsg failed!");

//卸载快捷键
bool bRet = ::UnregisterHotKey(hWnd, HOTKEY_OPEN_MSG);

//快捷键的响应函数 OnHotKey()添加在你设置快捷键的窗口中,即上面hWnd的dialog中
afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);

void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
   // TODO: Add your message handler code here and/or call default
   switch(nHotKeyId)
   {
         case HOTKEY_OPEN_MSG:
          {   
            //添加你要让快捷键执行的功能
         }
          break;
   }
__super::OnHotKey(nHotKeyId, nKey1, nKey2);
}
页: [1]
查看完整版本: MFC CHotKeyCtrl 快捷键