我正在使用C ++开发一个俄罗斯方块游戏,结合普通的旧版WinAPI,GDI和GDI +。应用程序窗口包含一些UI控件以及用于绘制游戏状态的静态控件。我正在使用键盘钩子,以便我可以响应箭头键移动当前块和空格键以放下块。
但是,击键也会影响UI。移动箭头键可能会更改收音机或组合框选择状态,按空格键可能会触发按钮或复选框,具体取决于当前具有焦点的控件。
有没有办法防止这种情况发生?我的临时黑客是强行关注隐藏的文本框。我希望有一个更清洁的解决方案。
答案 0 :(得分:1)
如果您正在使用WH_KEYBOARD_LL或WH_KEYBOARD键盘挂钩,则可以从hookproc返回1以防止将密钥传递给系统的其余部分。 在这种情况下不要调用下一个hookproc。
但是,这可能会对使用钩子的东西造成严重破坏,并且会在钩子链中出现。
如果您正在编写GDI应用程序,那么您已经有了一个消息循环,是否有任何理由您没有使用消息循环来查找KEY_UP / KEY_DOWN消息?
您可以设置其他控件,以便它们不会聚焦......
答案 1 :(得分:1)
这是一个真正的钩子(用SetWindowsHook设置)?如果是这样,您可以在处理消息时从hookproc返回非零值,Windows不会将消息传递给对话框。