MFC 控件添加热键

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值