新建一个基于对话框的工程,添加一个按钮,修改按钮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 键达到和点击“打开”按钮一样的效果: