c++ - Win32 中缺少鼠标移动消息

标签 c++ winapi opengl mouse

我正在编写一个用于绘画的 Win32 OpenGL 应用程序,其中处理所有鼠标移动至关重要。碰巧的是,有时我的程序中的绘画操作无法实时执行——这对我来说很好,只要所有鼠标事件都排队并可以稍后处理。现在我原以为这只是调用 PeekMessage 确保处理所有事件的问题,但是当我这样做时,很明显我的应用程序接收到的鼠标移动是不一样的保真度与 Windows 显示的一样。

这是 Windows 的一项功能吗?当应用程序是劳动密集型时,鼠标事件是否被丢弃?或者我错过了什么?无论哪种情况,我该怎么做才能补救这种情况?我想避免多线程,部分原因是,据我所知,Win32 要求消息回调在主线程中,我不确定是否将 OpenGL 的东西分离到不同的上下文。

至于代码示例,我基本上使用下面链接中的模板代码。我正在检查的消息是 WM_MOUSEMOVE

http://nehe.gamedev.net/tutorial/creating_an_opengl_window_(win32)/13001/

最佳答案

Is this a feature of Windows? Are mouse event dropped when the application is labor intensive?

是的,这是一项功能。 WM_MOUSEMOVE 消息不会被丢弃,它们是合成的。换句话说,它们实际上并没有发布到消息队列中。这在实践中效果不佳,用户可能会在一秒钟内产生大量鼠标移动,并在您的程序繁忙时迅速将消息队列填满。

自上次调用 GetMessage() 后鼠标移动时,您会收到一条 WM_MOUSEMOVE 消息。你得到最后一个已知位置。因此,您获取它们的速率以及它们之间的像素数直接取决于您调用 GetMessage() 的频率。

另一种方法是使用 raw input .

关于c++ - Win32 中缺少鼠标移动消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17512457/

相关文章:

c++ - mem_func 和虚函数

c++ - 背景颜色不显示文本的编辑框

python - 旋转后的 OpenGL python 和 pygame 翻译不适用于鼠标外观和移动

c++ - 通过指针成员传递类

c++ - 持续集成服务能否在本地构建 Linux 包?

winapi - 模式对话框的消息泵如何与主应用程序消息泵交互?

c++ - winapi mouse_event 错误坐标

java - 使用 Windows 时 glDrawElements 上的 EXCEPTION_ACCESS_VIOLATION

c++ - 默认情况下是 GLfloat 还是 GLdouble?

c++ - gnu slist 执行错误 : lost of file . ../bits/allocator.h: 没有那个文件