gpt4 book ai didi

c++ - 为什么这个 Windows 消息循环不处理快捷键/tab 键?

转载 作者:行者123 更新时间:2023-12-01 14:36:30 25 4
gpt4 key购买 nike

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

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

(可以作为点击按钮的 Action 添加到对话框中以演示问题)。在此循环期间,对话框被正确绘制并对几乎所有内容使用react,除了当我按下例如 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, 0)) {
if (!IsDialogMessage(hwndDlg, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

关于c++ - 为什么这个 Windows 消息循环不处理快捷键/tab 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614768/

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