Sil*_*Sil 2 c++ user-interface winapi mfc
在冗长的处理过程中使用的代码中有以下循环:
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Run Code Online (Sandbox Code Playgroud)
(可以只添加到对话框作为按钮单击的操作来演示问题)。在这个循环中,对话框被正确绘制并对几乎所有内容做出反应,除了当我按下例如 ALT 显示热键下划线时,例如 O 下划线:
它还忽略用于在控件之间切换的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |