我目前正忙于在 Windows XP 的 C++ 应用程序之类的游戏中更改鼠标光标。
要更改光标,我正在使用 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 鼠标指针的应用程序,否则很难将调试器与应用程序隔离。
关于c++ - PeekMessage() 重置鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1844404/