c++ - 如何防止箭头键改变 UI 状态?

标签 c++ winapi

我正在使用 C++ 结合普通的旧 WinAPI、GDI 和 GDI+ 开发俄罗斯方 block 游戏。应用程序窗口包含一些 UI 控件以及用于绘制游戏状态的静态控件。我正在使用键盘 Hook ,以便我可以响应箭头键移动当前 block 和空格键放下 block 。

但是,击键也会影响 UI。移动箭头键可能会更改单选框或组合框的选择状态,按下空格键可能会触发按钮或复选框,具体取决于当前获得焦点的控件。

有没有办法避免这种情况发生?我的临时 hack 是强制将焦点放在隐藏的文本框上。我将不胜感激更清洁的解决方案。

最佳答案

如果您正在使用 WH_KEYBOARD_LL 或 WH_KEYBOARD 键盘钩子(Hook),您可以从 hookproc 返回 1 以防止将键传递给系统的其余部分。 在这种情况下不要调用下一个 hookproc。

但是,这可能会对使用钩子(Hook)并在钩子(Hook)链中跟随你的东西造成严重破坏。

如果您正在编写一个 GDI 应用程序,您已经有一个消息循环,您是否有任何理由不使用消息循环来查找 KEY_UP/KEY_DOWN 消息?

您可以设置其他控件,使它们不会获得焦点...

关于c++ - 如何防止箭头键改变 UI 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062189/

相关文章:

c++ ListView - 使用 ListView_DeleteAllItems 后无法插入新项目

c# - 是否可以在自己的 .Net 应用程序中嵌入 Windows Sidebar Widgets

c++ - 从 Windows 上的文件中删除前 N 个字节的最有效方法是什么?

c++ - 为什么引用类型成员的默认初始化会导致编译器警告?

c++ - 指针数组段错误

c++ - 使用 boost::ptr_vector 的引用或指针符号

c++ - WriteProcessMemory 到启用了 SeDebugPrivilege 的 SYSTEM 进程。 (三、远景)

c++ - GDI+ 双缓冲 : backbuffer dual-colored monochrome

c++ - 以后可以初始化引用变量吗?

c++ - 如何强制 g++ 链接器加载不直接调用的符号 - 避免 undefined reference