新建一個基於對話框的工程,添加一個按鈕,修改按鈕ID,這裏爲ID_BTN_OPENFILE,爲按鈕添加消息響應事件,這裏我打開文件保存對話框:
void CAccelDlg::OnBtnOpenfile()
{
// TODO: Add your control notification handler code here
CFileDialog dlg (TRUE);
dlg.DoModal ();
}
爲工程添加一個加速鍵資源,添加一條,注意ID要和按鈕的ID相同,只有這樣才能產生關聯
爲主對話框類添加一個加速鍵變量成員:
HACCEL m_hAccel;
在對話框的OnInitDialog初始化函數中加載加速鍵資源
// 加載加速鍵資源
m_hAccel = LoadAccelerators (AfxGetInstanceHandle (), MAKEINTRESOURCE(IDR_ACCELERATOR1));
然而對話框要處理加速鍵需要處理按鍵消息,翻譯加速鍵,添加虛函數:PreTranslageMessage,在函數裏添加對加速鍵的翻譯函數
TranslateAccelerator (m_hWnd, m_hAccel, pMsg);
Ok, 到這裏就可按 Ctrl+o 鍵達到和點擊“打開”按鈕一樣的效果: