我应该在TranslateAccelerator()之前调用IsDialogMessage()吗?

时间:2015-03-26 10:33:51

标签: winapi

我的主窗口是使用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);
    }
}

1 个答案:

答案 0 :(得分:0)

线程已经过时了,但是如果有人要搜索同样的问题,请接受我的观点:

出于某种原因我需要IsDialogMessage()。然而,它完全禁用了我的所有加速器,如F1等,根据“经典”我把TranslateAccelerator()放在第二个位置。不幸的是,我无法解决这个谜团(坦率地说,没有努力尝试;需要做一个特殊的测试......)相反,我计划尝试子类化,所以我可以完全摆脱IsDialogMessage。但后来我决定换掉电话,等等,一切都开始好起来了!

因此,您可以在IsDialogMessage()之前放置TranslateAccelerator(),只需确保它不会阻止重要的键击。

但主要问题仍然没有答案:“为什么加速器在首次调用IsDialogMessage()时不起作用?”