您的位置:首页 > 其它

VC添加快捷键

2013-03-28 15:32 169 查看
最开始编程的时候,给程序添加快捷键的方法是,给程序添加一个hook,有hook监控,这样比较麻烦。

这里转载一篇文章 。

方法一:

主菜单快捷键

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 C****::OnHotKey(WPARAM wParam,LPARAM lParam)

  if(wParam==1001||wParam==1002)

  CWnd::SetForegroundWindow();//使得被激活窗口出现在前景

  MessageBox("Hello!";

   //用户可在此添加代码

  return 0;

6.程序运行完毕后解除热键

  在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.

  UnRegisterHotKey(m_hWnd,1001);

  UnRegisterHotKey(m_hWnd,1002);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: