mfc-hotkey

hotkey控件的使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

UINT (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"));
}
}
}

设置默认值

1
2
3
void SetHotKey(
WORD wVirtualKeyCode,
WORD wModifiers);