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鼠标指针的应用程序,否则很难将调试程序与应用程序隔离。

+0

我只是在使用键盘进行调试。鼠标仍然在应用程序窗口之上。所以,我可以在通过代码时观察并了解它何时发生变化。 – 0xC0DEFACE 2009-12-04 01:58:15

+0

我不认为这是可靠的。调试器仍然影响指针。如果您在不调试的情况下运行应用程序会发生什么那它不行吗? – wallyk 2009-12-04 02:00:33

+0

它仍然发生。如果我在消息循环之后'系统(“暂停”)应用程序,我可以看到光标已经改变,所以虽然特定的消息可能不正确,但仍然必须在某处发生。 – 0xC0DEFACE 2009-12-04 02:04:12