c++ - joySetCapture 不适用于 fChanged = false

标签 c++ windows

我正在使用带有 fChanged(第 4 个参数)= true 的 joySetCapture

只有在位置发生变化时我才会收到消息,这是我应该做的。 但是,按下操纵杆按钮时我没有收到任何消息。

如果我使用 fChanged = false,定期消息的 wParam 会正确更新。

如何在不使用定期消息的情况下在位置或按钮发生变化时接收消息?

最佳答案

joySetCapture 的文档表示如果 fChanged 为真,则当位置变化超过阈值时,发送消息。由于它没有提到按钮,我假设它在按下按钮时不会发送消息。这对我来说似乎是糟糕的设计,但如果是这样,那么你必须处理它。

您为什么不想使用定期轮询消息?只要您将轮询间隔设置为合理的值(例如 60 Hz 刷新率时为 16 毫秒),我可以向您保证轮询操纵杆不会成为您应用程序的瓶颈,因此这不是性能问题.没有理由将轮询间隔设置得非常小,因为硬件根本不会那么快地发送更新,所以您只会浪费周期来处理相同的数据。

最后,多媒体操纵杆 API 有点过时并且已被 DirectX 取代。您应该改用 DirectInput,以便您可以处理具有 4 个以上按钮或 2 个以上轴的操纵杆。此外,如果您使用的是 Xbox 360 Controller ,则应使用 XInput 库来处理这些 Controller 。

关于c++ - joySetCapture 不适用于 fChanged = false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791002/

相关文章:

c++ - 数组或图像中的唯一值数字

c++ - mmioOpen 出现奇怪的文件未找到错误

windows - 将 Oracles (dbstart/oratab) 指令从 Linux 转换为 Windows

c++ - 生成错误 : undefined reference to `cv_bridge::CvImage::toImageMsg() const'

c++ - C++中静态对象的析构顺序

c++ - While 和 Do/While 循环意外中断

python - 在 Windows 终端中获取外部 python 程序的输出

windows - 通过链接文件运行可执行文件时保留cmd工作目录

windows - 将文件移动到新目录的批处理命令

c++ - 使用二维数组。段错误 - C++