MFC CHotKeyCtrl 快捷键
#define HOTKEY_OPEN_MSG 43210CHotKeyCtrl 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]