在设计应用程序菜单时,可以选择使用键盘加速键给任意或者全部菜单项分配快捷键,加速键也会引发WM_COMMAND消息。
第一步,是要创建一个加速键表(特殊的资源)。具体方法是,在资源列表视图里面,添加加速资源,然后根据所需要的条件给按键绑定相应的值,绑定完按键,记得回车,又生成下一个加速资源,继续绑定下一个需要的按键或者菜单项。
第二步,由于非框架窗口缺少CFrameWnd中对加速键的支持,所以要在派生类中添加一个HACCEL的数据成员:
HACCEL m_hAccel;
第三步,在初始化函数中,调用api函数::LoaderAccelerator加载加速键表。将 ::LoaderAccelerator返回的句柄复制到m_hAccel:
m_hAccel= ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
第四步,在窗口类中重载PreTranslateMessage。
BOOL CDlgCalcDlg::PreTranslateMessage(MSG* pMsg) { if (m_hAccel != NULL) if (::TranslateAccelerator (m_hWnd, m_hAccel, pMsg)) return TRUE; return CDialog::PreTranslateMessage (pMsg); }
第五步,创建WM_COMMAND消息的处理函数
void function();
第六步,添加消息响应
ON_COMMAND(xxxBUTTON,fucntion);