使用热键
两种方法:
(1)
直接重写WM_HOTKEY
头文件中:
public:
afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);
源文件中:
BEGIN_MESSAGE_MAP(CMyhotKeyDlg, CDialogEx)
ON_WM_HOTKEY()
END_MESSAGE_MAP()
BOOL CMyhotKeyDlg::OnInitDialog()
{
::RegisterHotKey(m_hWnd,199,MOD_ALT,'U');//注意要大写,注册的热键id为199(自己定义),Alt+U
//::RegisterHotKey(m_hWnd,200,MOD_CONTROL,'W');热键为ctrl+W,如果为Alt+W 就不成功,应该是系统有了吧
}
void CMyhotKeyDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nHotKeyId == 199)
{
AfxMessageBox(_T("使用了热键"));
return;
}
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
BOOL CMyhotKeyDlg::DestroyWindow()
{
// TODO: 在此添加专用代码和/或调用基类
::UnregisterHotKey(m_hWnd,199);//释放资源
return CDialogEx::DestroyWindow();
}
(2)手动添加热键消息
头文件中:
afx_msg long MyHotKey(WPARAM wParam,LPARAM lParam);
源文件中:
BEGIN_MESSAGE_MAP(CMyhotKeyDlg, CDialogEx)
ON_MESSAGE(WM_HOTKEY,MyHotKey)
END_MESSAGE_MAP()
HRESULT CMyhotKeyDlg::MyHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam == 199)
{
AfxMessageBox(_T("使用了热键"));
}
return TRUE;
}
BOOL CMyhotKeyDlg::DestroyWindow()
{
// TODO: 在此添加专用代码和/或调用基类
::UnregisterHotKey(m_hWnd,199);//释放资源
return CDialogEx::DestroyWindow();
}
总结:
(1)在初始化函数中,使用RegisterHotKey函数注册热键
(2)自定义热键消息或重写热键消息
(3)热键函数进行热键id判断
(4)使用UnregisterHotKey释放热键资源