【问题标题】:How to prevent arrow keys from changing the UI state?如何防止方向键改变 UI 状态?
【发布时间】:2011-05-03 00:12:52
【问题描述】:

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

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

有没有办法防止这种情况发生?我的临时技巧是强制关注隐藏的文本框。我将不胜感激更清洁的解决方案。

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 直接从消息循环中操作事件似乎不是一个坏主意。我试试看。
    【解决方案2】:

    这是一个真正的钩子(用 SetWindowsHook 设置)吗?如果是这样,您可以在处理消息时从 hookproc 返回一个非零值,并且 Windows 不会将消息传递给对话框。

    【讨论】:

    • 是的,它是一个 WH_KEYBOARD。谢谢。
    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多