热键(或称组合键),在一个软件中有时候是很必须的。我们可以通过自定义热键和响应的方式,隐藏一些不向用户开放的功能,以达到一些简单的控制和目的。
自定义一个热键,一般需要经过如下的基本步骤:
⑴ 为热键赋予一个ID;
⑵ 向系统注册该热键;
⑶ 定义消息响应函数;
⑷ 解除注册,释放资源。
下面结合实例来详细说明(完整程序请到我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/3523748):
⑴ 在Point1Dlg.h文件中声明自定义热键的ID变量及消息响应函数:
//自定义热键 int m_nHotKeyID;//热键ID afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//自定义热键响应函数
⑵ 在Point1Dlg.cpp中完成上述四个基本步骤:
① 在BEGIN_MESSAGE_MAP(CPoint1Dlg,CDialog)
ON_MESSAGE(WM_HOTKEY,&CPoint1Dlg::OnHotKey)//热键响应消息映射宏
END_MESSAGE_MAP()之间,添加热键响应消息映射宏。
② 在OnInitDialog()函数中注册热键:
//向系统注册热键:ALT+0 m_nHotKeyID=0;//为热键赋予ID号 BOOL m_isKeyRegistered =RegisterHotKey(GetSafeHwnd(),m_nHotKeyID,MOD_ALT,VK_NUMPAD0);//向系统注册该热键 ASSERT(m_isKeyRegistered!= FALSE);
③ 添加热键消息响应函数:
LONG CPoint1Dlg::OnHotKey(WPARAM wParam,LPARAM lParam){ MessageBox(_T("您按下了ALT+0")); return 0; }
④ 在某函数中(自己选择或定义)解除注册、释放资源:
//解除注册,释放系统资源 BOOL m_iskeyUnregistered = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID); if(m_iskeyUnregistered) MessageBox(_T("解除注册、释放资源成功!")); else MessageBox(_T("解除注册、释放资源失败!"));
效果图