2024年1月10日发(作者:)

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);//注销热键

6.最后我们看一下,当我们按下F2后,就会弹出一个快捷键F2的对话框