MFC 控件添加热键


  1. MFC 控件添加热键 2014-12-24 14:28:47
  2. 标签:C++ MFC 控件 热键使用
  3. MFC中的控件添加我们想要的控件热键,在动手之前,必须清楚,热键分为local的和global的, 其中local的职能在当前程序有焦点(被激活)时有效,而global的,则无论什么时候都有效,测试local的要优先于global的,就是如果当前激活窗口的快捷键与未激活窗口的快捷键重叠,当前激活窗口优先响应。另外还包括menubutton
  4. 自然而然,创建热键的方法也有多种,不同的创建方法创建的热键作用范围不一定相同。应该根据需求合理的选择自己的方法。
  5. 方法一:
  6. 打开对话框资源,选择指定控件的属性-->在caption项中你定义的名字后添加(&Y)。这样就可以实现热键。其中Y表示你要制定的快捷按键,我选的是Y,按下ALT+Y即可执行这个控件。
  7. 该方式热键只有当FOCUS在控件上时才起作用,算是局部热键。
  8. 方法二:
  9. 1. 在资源视图中添加资源,选择"Accelerator"选项新建即可;
  10. 2. 打开新建的文件夹下的"IDR_ACCELERATOR1"中编辑,其中包括ID、修饰符、键、类型。ID中选择你要添加快捷键的菜单、按钮的ID编号,修饰符中选择你是否要使用组合键,如:AltAlt+Shift等等,键中选择你要使用什么样的虚拟键码,类型中选择VK形式或者是ASCII形式。
  11. 3. 在你的对话框的头文件中添加快捷键变量,如HACCEL m_hAcc
  12. 4. 在你的对话框的源文件的OnInitDialog函数中加载快捷键,如:
  13. 1 HACCEL m_hAcc=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
  14. 5. 重载函数PreTranslateMessage,使用类向导,重载虚函数PreTranslateMessage,如:
  15. 12345678910 BOOL CVideoMonitorDlg::PreTranslateMessage(MSG* pMsg)
  16. {
  17. if (WM_KEYFIRST<=pMsg->message&&pMsg->message<= WM_KEYLAST)
  18. {
  19. HACCEL hAccel=m_hAcc;
  20. if (hAccel && ::TranslateAccelerator(m_hWnd, hAccel, pMsg))
  21. return TRUE;
  22. }
  23. return CDialogEx::PreTranslateMessage(pMsg);
  24. }
  25. 6. 通过以上5个步骤基本上即可对工程中的菜单或者按钮添加热键。
  26. 方法三:
  27. 使用WM_HOTKEY
  28. 在对话框头文件中:
  29. 12 afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
  30. afx_msg void OnDestroy();
  31. 在对话框CPP文件中:
  32. 1234 BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
  33. ON_MESSAGE(WM_HOTKEY,OnHotKey)
  34. ON_WM_DESTROY()
  35. END_MESSAGE_MAP()
  36. hotkey对应映射:
  37. 1234567 LRESULT CYourDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
  38. {
  39. ifwParam==IDC_XXX
  40. OnYourFunction();
  41. //ToDo: add function
  42. return 0;
  43. }
  44. 注册热键:
  45. 1234 BOOL CYourDlg::OnInitDialog()
  46. {
  47. ::RegisterHotKey(GetSafeHwnd(), IDC_XXX, MOD_ALT, 'D');//注册热键alt+D(D必须大写)
  48. }
  49. 记得销毁:
  50. 1234 void CYourDlg::OnDestroy()
  51. {
  52. ::UnregisterHotKey(GetSafeHwnd(),IDC_XXX);//销毁热键
  53. }
  54. 另外一篇参考:http://lty2154216.blog.163.com/blog/static/17982629320117129491666/





posted @ 2016-03-20 15:38  hungryvampire  阅读(7451)  评论(0编辑  收藏  举报