MFC-hotkey

hotkey控件的使用。

//用来转换的
UINT ModToHotkey(UINT fsModifiers)
{
if ((fsModifiers & MOD_SHIFT) && !(fsModifiers & MOD_ALT)) // shift转alt
{
fsModifiers &= ~MOD_SHIFT;
fsModifiers |= HOTKEYF_SHIFT;
}
else if (!(fsModifiers & MOD_SHIFT) && (fsModifiers & MOD_ALT)) // alt转shift
{
fsModifiers &= ~MOD_ALT;
fsModifiers |= HOTKEYF_ALT;
}
return fsModifiers;
}

UINT HotkeyToMod(UINT fsModifiers)
{
if ((fsModifiers & HOTKEYF_SHIFT) && !(fsModifiers & HOTKEYF_ALT)) // shift转alt
{
fsModifiers &= ~HOTKEYF_SHIFT;
fsModifiers |= MOD_SHIFT;
}
else if (!(fsModifiers & HOTKEYF_SHIFT) && (fsModifiers & HOTKEYF_ALT)) // alt转shift
{
fsModifiers &= ~HOTKEYF_ALT;
fsModifiers |= MOD_ALT;
}
return fsModifiers;
}

void CtesseractDemoDlg::OnBnClickedBtnSavehotkey()
{
WORD wVirtualKeyCode;
WORD wModifiers;
m_hotkey.GetHotKey(wVirtualKeyCode, wModifiers);
if (wVirtualKeyCode && wModifiers)
{
UnregisterHotKey(GetSafeHwnd(), m_iHotKeyId); //注销HotKey, 释放资源。

wModifiers = HotkeyToMod(wModifiers);
//注册全局热键Alt + F8
if (0 == RegisterHotKey(GetSafeHwnd(), m_iHotKeyId, wModifiers | MOD_NOREPEAT, wVirtualKeyCode))
{
OutputDebugString(_T("register hotkey failed.\n"));
}
}
}

设置默认值

void SetHotKey(
WORD wVirtualKeyCode,
WORD wModifiers);