PeekMessage()重置鼠标光标
问题描述:
我目前正忙于在像Windows XP的C++应用程序这样的游戏中更改鼠标光标。PeekMessage()重置鼠标光标
要更改光标,我正在使用SetCursor()
并传入正在工作的所需光标。但是,在调用PeekMessage()
的while循环期间,光标不断重置为默认箭头。
这是有问题的循环:
MSG msg;
while(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
在调试我发现,在通话过程中改变PeekMessage()
光标之后msg.message ==在0x200,这将使该消息的其中之一:
WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200
我一直未能找到任何信息,为什么发生这种情况,并没有经验的Windows消息。
谢谢。
编辑:
根据here系统每次重绘类光标移动鼠标,有效地设置回默认光标。有鉴于此,我将此添加到窗口消息回调函数中:
case WM_SETCURSOR:
return 0;
问题已解决。
答
你是怎么调试的?除非您使用SoftIce或其他不共享Windows鼠标指针的应用程序,否则很难将调试程序与应用程序隔离。
我只是在使用键盘进行调试。鼠标仍然在应用程序窗口之上。所以,我可以在通过代码时观察并了解它何时发生变化。 – 0xC0DEFACE 2009-12-04 01:58:15
我不认为这是可靠的。调试器仍然影响指针。如果您在不调试的情况下运行应用程序会发生什么那它不行吗? – wallyk 2009-12-04 02:00:33
它仍然发生。如果我在消息循环之后'系统(“暂停”)应用程序,我可以看到光标已经改变,所以虽然特定的消息可能不正确,但仍然必须在某处发生。 – 0xC0DEFACE 2009-12-04 02:04:12