微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此Windows消息循环不处理快捷键/ tab键?

如何解决为什么此Windows消息循环不处理快捷键/ tab键?

冗长的处理过程中使用的代码中存在以下循环:

MSG msg = { 0 };
while (GetMessage(&msg,NULL,0)) {
    TranslateMessage(&msg);
    dispatchMessage(&msg);
}

(可以作为单击按钮的操作添加到对话框中,以演示该问题)。在此循环中,对话框会正确绘制并对几乎所有内容都起作用,但当我按ALT键显示热键的下划线时,例如按下O的下划线时,会出现以下情况:

enter image description here

它也忽略用于在控件之间切换的TAB键。要使此功能正常工作,循环中是否缺少某些内容?我也尝试过在WindowProc中寻找WM_COMMAND,这对应于通过键O按下特定的按钮,在上述循环的情况下,WM_COMMAND永远不会传入...如果我用鼠标单击,或者删除自定义循环,则生成WM_COMMAND。

如何使此行为与自定义循环一起使用?请注意,这只是一个演示示例,在真实代码中,它做得更多(禁用导致该操作和可能递归的按钮),但是问题是相同的,在其中类似循环的某个地方忽略了这些tab / alt键。

解决方法

这些功能是由IsDialogMessage()实现的,您并未调用。

MSG msg = { 0 };
while (GetMessage(&msg,NULL,0)) {
    if (!IsDialogMessage(hwndDlg,&msg)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。