我错过了什么步骤?
我有一个加速器表:
我在我的应用程序类中添加了一个成员变量:
HACCEL m_hAccel;
我添加了以下覆盖:
BOOL CMeetingScheduleAssistantApp::ProcessMessageFilter(int code, LPMSG lpMsg)
{
if (m_hAccel)
{
if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_hAccel, lpMsg))
{
AfxMessageBox(_T("Found"));
return(TRUE);
}
}
return CWinAppEx::ProcessMessageFilter(code, lpMsg);
}
我只使用弹出消息框进行调试,它确认正在检测到按键。
我的菜单资源设置正确:
所以我的菜单是用菜单处理程序操作的。我已经设置了加载加速器表的程序。例如,如果我在加速器表检测到它时按下Ctrl++ ,为什么我的弹出对话框实际上不处理它?ShiftX
我应该指出,我的主应用程序对话框显示两个编辑器之一。因此,当显示编辑器时,我会加载该编辑器的加速器表。
我错过了什么步骤?为什么对话框不处理加速器?
更新
我找到了这个答案How to make child control handle actuator command of parent CView。
我发现如果我HACCEL
直接在弹出对话框中添加一个,然后只需使用PreTranslateMessage
:
if (m_hAccelTable)
{
if (::TranslateAccelerator(GetSafeHwnd(), m_hAccelTable, pMsg))
return TRUE;
}
有用。