MFC 热键设置 OnHotKey方法和Accelerator方法的设置

it2023-10-17  71

写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法:

方法一:定义热键的消息响应函数:OnHotKey 定义系统全局热键: 1、首先在.h文件中添加消息响应函数声明   afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam); 2、关联消息及响应函数         BEGIN_MESSAGE_MAP()     ON_MESSAGE(WM_HOTKEY,OnHotKey) END_MESSAGE_MAP() 3、在初始化函数里注册热键 RegisterHotKey(m_hWnd,ID_HOTKEY,MOD_ALT,‘s’);   // ID_HOTKEY是自己定义的一个ID宏 ‘s'可以写成ASCII码 4、在消息响应函数里添加操作 LRESULT  CMyTest::OnHotKey(WPARAM wParam,LPARAM lParam)   {   UINT Mod = (UINT) LOWORD(lParam); // key-modifier flags   UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code   //判断响应了什么热键   if( MOD_CONTROL ==  Mod  && ‘s’ == uVirtKey )   {   AfxMessageBox(_T("你按下了组合键 ALT+ S"));  }   else   AfxMessageBox(_T("你按下了未知热键"));   return 0;   }   方法二:  Accelerator方法 只在本应用程序内有效 http://support.microsoft.com/?kbid=222829   1、插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联  2、在对话框头文件中声明:       HACCEL   m_hAccel;  3、在对话框的构造函数里初始化m_hAccel      m_hAccel   =   ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));  4、然后重载对话框的PreTranslateMessage函数,在  BOOL   CAboutDlg::PreTranslateMessage(MSG*   pMsg)    {        if   (m_hAccel)          {              if   (::TranslateAccelerator(m_hWnd,   m_hAccel,   pMsg))                {                    return(TRUE);              }        }        return   CDialog::PreTranslateMessage(pMsg);  }  然后重载 OnCommand();函数; BOOL CFreeChatDlg::OnCommand(WPARAM wParam, LPARAM lParam) { if (ID_ALT_S == LOWORD(wParam))//ID_ALT_S是在 Accelerator中注册快捷键的ID { //加入响应的快捷键的操作 } return CDialog::OnCommand(wParam,lParam); }

最新回复(0)