MFC的对话框(不是从CFrameWnd类继承下来的),不会自动响应加速键,这需要自己添加代码去实现这个功能
@1.对话框中添加成员变量:
HACCEL m_hAccel;
@2.在OnInitDialog()函数中添加代码:
@3.重载PreTranslateMessage函数:
@4.后面的操作就和Frame-View框架的程序一样了:
a.资源中插入一个加速键IDR_ACCELERATOR1,编辑一个加速键的值
如ID_XXXX, VK_F9, VIRTKEY
b.添加成员函数void Xxxx(void)
c.在BEGIN_MESSAGE_MAP、END_MESSAGE_MAP之间添加
ON_COMMAND(ID_XXXX, &CMyDlg::Xxxx)
这样对话框就能响应加速键调用对应的函数了
@1.对话框中添加成员变量:
HACCEL m_hAccel;
@2.在OnInitDialog()函数中添加代码:
// 装载加速键
m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
ASSERT(m_hAccel);
@3.重载PreTranslateMessage函数:
BOOL CMainDlg::PreTranslateMessage(MSG *pMsg)
{
if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
if (m_hAccel && ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
@4.后面的操作就和Frame-View框架的程序一样了:
a.资源中插入一个加速键IDR_ACCELERATOR1,编辑一个加速键的值
如ID_XXXX, VK_F9, VIRTKEY
b.添加成员函数void Xxxx(void)
c.在BEGIN_MESSAGE_MAP、END_MESSAGE_MAP之间添加
ON_COMMAND(ID_XXXX, &CMyDlg::Xxxx)
这样对话框就能响应加速键调用对应的函数了