VC中添加快捷键代码实现

来源:互联网 发布:知乎 螳臂当车 编辑:程序博客网 时间:2024/06/01 20:49
方法一:主菜单快捷键BOOL CExampleDlg::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case 'F': if(::GetKeyState(VK_MENU) < 0 )MessageBox("hello"); }}return CDialog::PreTranslateMessage(pMsg);}上面代码是用alt+F响应"文件"主菜单项,该主菜单的captain设为“文件(&F)”非主菜单快捷键1 插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联2 在对话框头文件中声明:HACCEL m_hAccel;3 在对话框的构造函数里初始化m_hAccelm_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);}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////方法二1   声明热键消息处理函数原型      在.h中消息映射声明处(AFX_mSG字样之后)加入如下语句:      LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);    2. 消息与相应处理函数相关联      在.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,     ON_MESSAGE(WM_HOTKEY,OnHotKey);    3. 为方便以后的操作     预先在类中创建一个响应WM_CREATE和WM_DESTROY消息的函数      OnCreate()与OnDestroy()的框架4.向系统登记热键      在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为        Ctrl+Shift+A.      RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');      RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');    5.处理热键    在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码     LRESULT CScrewView::OnHotKey(WPARAM wParam,LPARAM lParam)    {if(wParam == 1001||wParam == 1002){     OnFun();             //CWnd::SetForegroundWindow(); //使得被激活窗口出现在前景   }        return 0;     }    6.程序运行完毕后解除热键      在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.      UnregisterHotKey(m_hWnd, 1001); //销毁快捷键    UnregisterHotKey(m_hWnd, 1002);
0 0