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/






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM