我的主窗口是使用CreateDialogParam()创建的无模式对话框,我需要使用加速器。我应该在调用TranslateAccelerator()之前调用IsDialogMessage()还是反过来?这两个中哪一个是正确的,为什么?
if(!IsDialogMessage(hDlg, &msg))
{
if(!TranslateAccelerator(hDlg, hAccel, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
或
if(!TranslateAccelerator(hDlg, hAccel, &msg))
{
if(!IsDialogMessage(hDlg, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
答案 0 :(得分:0)
线程已经过时了,但是如果有人要搜索同样的问题,请接受我的观点:
出于某种原因我需要IsDialogMessage()。然而,它完全禁用了我的所有加速器,如F1等,根据“经典”我把TranslateAccelerator()放在第二个位置。不幸的是,我无法解决这个谜团(坦率地说,没有努力尝试;需要做一个特殊的测试......)相反,我计划尝试子类化,所以我可以完全摆脱IsDialogMessage。但后来我决定换掉电话,等等,一切都开始好起来了!
因此,您可以在IsDialogMessage()之前放置TranslateAccelerator(),只需确保它不会阻止重要的键击。
但主要问题仍然没有答案:“为什么加速器在首次调用IsDialogMessage()时不起作用?”