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);
}

  

以上就大工告成了,看看运行结果吧:

 

posted @ 2017-08-24 17:26  Hisdar  阅读(803)  评论(0)    收藏  举报