天天看点

VC中添加快捷键代码实现

方法一:主菜单快捷键

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_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);

//

方法二

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);

继续阅读