1.为类添加消息ID
在需要要添加热键的类的头文件(.h)开始处添加如下代码:
#define WM_MYHOTKEY WM_USER+1000
//在这里我们需要知道为了防止用户定义的消息ID与系统的消息ID冲突,MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用。
2.为类手动添加WM_HOTKEY消息映射
在需要要添加热键的类的头文件(.h)的DECLARE_MESSAGE_MAP()前添加:
afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);
在需要要添加热键的类的源文件(.cpp)的BEGIN_MESSAGE_MAP(CHotKeyDlg,CDialog)宏和END_MESSAGE_MAP()宏之间添加:
ON_MESSAGE(WM_HOTKEY,OnHotKey)
3.在类的初始化函数中调用RegisterHotKey()函数,注册快捷键
打开类向导,为我们的类添加一个初始化函数,并在函数中添加注册快捷键的代码
BOOL hotkey::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if(RegisterHotKey(GetSafeHwnd(),WM_MYHOTKEY,NULL,VK_F2))
MessageBox("快捷键注册成功");
else
MessageBox("快捷键注册失败");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
这里的RegisterHotKey(GetSafeHwnd(),WM_MYHOTKEY,NULL,VK_F2)函数中GetSafeHwnd()函数是用来返回窗口的句柄,WM_MYHOTKEY为快捷键的ID,NULL表示快捷键无辅助按键,VK_F2是快捷键的键值。
4.在响应按下快捷键的函数OnHotKey()中添加按下快捷键的处理程序
long hotkey::OnHotKey(WPARAM wp,LPARAM lp)
{
if(wp==WM_MYHOTKEY)
MessageBox("快捷键F2");
return 0;
}
5.注销已注册的快捷键,释放系统资源
打开类向导,给我们的对话框类添加一个Destroy()函数,并在函数中添加注销热键的代码
void hotkey::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
UnregisterHotKey(GetSafeHwnd(),WM_MYHOTKEY);//注销热键
}