WM_KEYDOWN消息未发送

WM_KEYDOWN message not sent

本文关键字:消息 KEYDOWN WM      更新时间:2023-10-16

我一直在尝试追踪程序中的错误。我注意到,每当我按住向上和向左箭头键并按空格键时,我的 WndProc 永远不会收到或处理 WPARAM 为 VK_SPACE 的WM_KEYDOWN消息。

有点好奇,所以我打开了Spy++并开始查看发送到我窗口的消息。我注意到,当我按住向左和向上箭头键并按另一个键(例如 A)时,WM_KEYDOWN(以及WM_CHAR)消息将发送到我的窗口。

但是,如果我按住向上和向左箭头键并按空格键,则空格键命中的WM_KEYDOWN消息不会发送到我的窗口。

这是什么原因呢?谁能证实这种行为?

发生这种情况是因为您的键盘正在执行所谓的重影。对于当今人们使用的大多数键盘来说,这是正常的。它被连接起来,因此生产成本要低得多,因此,这样的事情一直在发生。

基本上,当同时按下同一行/列中的三个键时,它们不能全部唯一标识,导致至少一个键无法通过。您唯一能做的就是购买防重影键盘,或重新设计控件以避免冲突。

在个人层面上,我在展示游戏前一两天就发现了这个问题,最终不得不将控件制作成 P1:SZXC 和空格以及 P2:/789 和 +。事先知道这确实是一件好事。