MFC 控件添加熱鍵 2014-12-24 14:28:47
標簽:C++ MFC 控件 熱鍵使用
給MFC中的控件添加我們想要的控件熱鍵,在動手之前,必須清楚,熱鍵分為local的和global的, 其中local的職能在當前程序有焦點(被激活)時有效,而global的,則無論什么時候都有效,測試local的要優先於global的,就是如果當前激活窗口的快捷鍵與未激活窗口的快捷鍵重疊,當前激活窗口優先響應。另外還包括menu,button。
自然而然,創建熱鍵的方法也有多種,不同的創建方法創建的熱鍵作用范圍不一定相同。應該根據需求合理的選擇自己的方法。
方法一:
打開對話框資源,選擇指定控件的屬性-->在caption項中你定義的名字后添加(&Y)。這樣就可以實現熱鍵。其中Y表示你要制定的快捷按鍵,我選的是Y,按下ALT+Y即可執行這個控件。
該方式熱鍵只有當FOCUS在控件上時才起作用,算是局部熱鍵。
方法二:
1. 在資源視圖中添加資源,選擇"Accelerator"選項新建即可;
2. 打開新建的文件夾下的"IDR_ACCELERATOR1"中編輯,其中包括ID、修飾符、鍵、類型。ID中選擇你要添加快捷鍵的菜單、按鈕的ID編號,修飾符中選擇你是否要使用組合鍵,如:Alt、Alt+Shift等等,鍵中選擇你要使用什么樣的虛擬鍵碼,類型中選擇VK形式或者是ASCII形式。
3. 在你的對話框的頭文件中添加快捷鍵變量,如HACCEL m_hAcc;
4. 在你的對話框的源文件的OnInitDialog函數中加載快捷鍵,如:
1 HACCEL m_hAcc=LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
5. 重載函數PreTranslateMessage,使用類向導,重載虛函數PreTranslateMessage,如:
12345678910 BOOL CVideoMonitorDlg::PreTranslateMessage(MSG* pMsg)
{
if (WM_KEYFIRST<=pMsg->message&&pMsg->message<= WM_KEYLAST)
{
HACCEL hAccel=m_hAcc;
if (hAccel && ::TranslateAccelerator(m_hWnd, hAccel, pMsg))
return TRUE;
}
return CDialogEx::PreTranslateMessage(pMsg);
}
6. 通過以上5個步驟基本上即可對工程中的菜單或者按鈕添加熱鍵。
方法三:
使用WM_HOTKEY。
在對話框頭文件中:
12 afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
afx_msg void OnDestroy();
在對話框CPP文件中:
1234 BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_WM_DESTROY()
END_MESSAGE_MAP()
hotkey對應映射:
1234567 LRESULT CYourDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==IDC_XXX)
OnYourFunction();
//ToDo: add function
return 0;
}
注冊熱鍵:
1234 BOOL CYourDlg::OnInitDialog()
{
::RegisterHotKey(GetSafeHwnd(), IDC_XXX, MOD_ALT, 'D');//注冊熱鍵alt+D(D必須大寫)
}
記得銷毀:
1234 void CYourDlg::OnDestroy()
{
::UnregisterHotKey(GetSafeHwnd(),IDC_XXX);//銷毀熱鍵
}
另外一篇參考:http://lty2154216.blog.163.com/blog/static/17982629320117129491666/