MFC-全局热键

本文详细介绍了如何在MFC对话框应用程序中注册和处理全局热键,包括使用RegisterHotKey()函数注册热键,WM_DESTROY消息中注销热键,以及添加WM_HOTKEY消息处理函数以响应热键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MFC-全局热键

 

转载▼

为基于对话框的应用程序增加全局热键其实没有多困难,只不过需要手工操作的东西相比来说稍微多一些而已。

1、在OnInitDialog中注册热键

使用函数RegisterHotKey()可以向系统注册全局热键,如下:

       RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'y');
       RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'Y');

上面的代码向系统注册了Ctrl+Shift+Y的热键,对应的热键ID为1001和1002

 

2、在WM_DESTROY消息处理函数中卸载热键

首先为对话框增加WM_DESTROY消息的处理函数。右键窗体,选择“Events...”:

 

在左侧的messages/events列表中,找到WM_DESTROY并选中,然后点击右侧的“Add and Edit”,添加并进入代码编辑状态:

 

在OnDestroy()函数中添加如下代码:

       void CTest_background_windowDlg::OnDestroy()
       {
           CDialog::OnDestroy();
           // TODO: Add your message handler code here
           UnregisterHotKey(m_hWnd, 1001); 
           UnregisterHotKey(m_hWnd, 1002); 
       }

利用UnregisterHotKey()函数注销之前注册的热键。

 

3、为对话框增加WM_HOTKEY消息处理函数

为了可以让对话框响应全局热键,需要增加对WM_HOTKEY消息的处理函数。由于在对话框的Events中无法直接找到WM_HOTKEY消息,所以需要手工添加代码,方法如下:

       在对话框的MESSAGE_MAP中增加:

              ON_MESSAGE(WM_HOTKEY,OnHotKey)

       OnHotKey()的函数原型如下:

              LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

       在对话框类中增加protected消息成员函数:

              afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

       在对话框类的实现cpp文件中增加该函数的实现体:

              LRESULT CTest_background_windowDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
              {
 

                     if (wParam== 1001||wParam==1002)
                     {
                         CWnd::SetForegroundWindow();//使得被激活窗口出现在前景 
                         //用户可在此添加代码
                     }

                  return 0;
              }

        在该函数中,主要是判断wParam是否与之前注册过的热键相同,并做出相应处理。在本例中,程序使用了CWnd::SetForegroundWindow()函数将自身至于最前,以达到按下热键之后呼唤出应用程序窗体的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值