c++ - WM_KEYDOWN 消息未发送

标签 c++ windows winapi spy++

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

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

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

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

最佳答案

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

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

在个人层面上,我在展示我的游戏前一两天发现了这一点,最终不得不将控件设置为类似于 P1:SZXC 和空格以及 P2:/789 和 +。事先知道确实是一件好事。

关于c++ - WM_KEYDOWN 消息未发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642280/

相关文章:

c++ - 如何在 Visual C++ 2010 Express 中更改编译器

winapi - Windows 10 上的 DwmExtendFrameIntoClientArea 奇怪行为

c# - 从头开始——我应该使用 (MS Visual Studio) C# 还是 (MS Visual Studio) C++?

windows - 是否可以使用 Git 找出两个任意文本文件之间的区别?

php - 配置 PHP 7.0.1 时如何修复 C++ 预处理器 "/lib/cpp"完整性检查失败错误

在 Windows 中通过终端运行 R 并保持 R session 打开

c++ - 如何使用 C++ 在 Windows 上创建具有 UNICODE 路径的文件

winapi - 为什么 WSAStringToAddress 采用非常量 AddressString?

c++ - QWizard::addPage() 上的 "QObject::connect: Attempt to bind non-signal Class::signal"警告

c++ - 有人可以向我解释为什么在 LLVM 的以下代码中使用相同操作数进行不等式测试吗?