VC/VS 下面怎么注册全局热键 Ctrl+Alt+A (QQ 的 Ctrl+Alt+A 用MFC 怎么实现)
1、 注册热键的代码,对于MFC 的程序,可以在OnInitDialog 中执行下面的代码
BOOL bRet = TRUE;
bRet = RegisterHotKey(m_hWnd, HORT_KEY_ID_ALT, MOD_CONTROL | MOD_ALT, 'A');
if (!bRet) {
MessageBox(_T("ALT registe fail"), _T("Message"), MB_OK);
}
代码的关键点是 bRet = RegisterHotKey(m_hWnd, HORT_KEY_ID_ALT, MOD_CONTROL | MOD_ALT, 'A'); 本人在网上找了好多资料,都是 Ctrl+A 或者 Alt+A 的,自己试了半天才搞定Ctrl+Alt+A. MFC中有很多可以 | 或者 & 的标记,只能说使用的时候多尝试吧
2、添加热键处理函数:
按组合键ctrl + shift + x 调出MFC的类向导,按照下图所示添加热键消息处理函数:
首先找到WM_HOTKEY消息,然后点击右边的添加处理程序,编辑代码,就可以了,当然你也可以直接添加代码。

宏定义
#define HORT_KEY_ID_CTRL_ALT_A 5402
消息映射:只需要在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间加上ON_WM_HOTKEY()就可以了
BEGIN_MESSAGE_MAP(CScreenCaptureDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_HOTKEY() ON_WM_KEYDOWN() END_MESSAGE_MAP()
消息处理函数声明
afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);
消息处理函数实现
void CScreenCaptureDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
if (nHotKeyId == HORT_KEY_ID_CTRL_ALT_A) {
MessageBox(_T("Ctrl + Alt + A pressed"), _T("message"), MB_OK);
}
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
以上就大工告成了,看看运行结果吧:


浙公网安备 33010602011771号