gpt4 book ai didi

winapi - 我应该在 TranslateAccelerator() 之前调用 IsDialogMessage()

转载 作者:行者123 更新时间:2023-12-05 06:44:24 36 4
gpt4 key购买 nike

我的主窗口是一个用 CreateDialogParam() 创建的无模式对话框,我需要使用加速器。我应该在调用 TranslateAccelerator() 之前调用 IsDialogMessage() 还是相反?这 2 项中哪一项是正确的,为什么?

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);
}
}

最佳答案

线程是旧的,但如果有人会搜索相同的问题,这是我的看法:

出于某种原因我需要 IsDialogMessage()。然而,当根据“经典”我将 TranslateAccelerator() 放在第二个位置时,它完全禁用了我所有的加速器,如 F1 等。不幸的是,我无法解开这个谜团(坦率地说,我尝试的不够努力;需要进行特殊测试……)相反,我打算尝试子类化,这样我就可以完全摆脱 IsDialogMessage。但后来我决定交换电话,瞧,一切都开始正常工作了!

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

但主要问题仍未得到解答:“为什么在首先调用 IsDialogMessage() 时加速器不起作用?”

关于winapi - 我应该在 TranslateAccelerator() 之前调用 IsDialogMessage(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29276275/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com