C++ peek message()重置鼠标光标
我现在在改变一个像C++应用程序的Windows XP游戏中的鼠标光标。p> 要更改光标,我正在使用C++ peek message()重置鼠标光标,c++,cursor,peekmessage,C++,Cursor,Peekmessage,我现在在改变一个像C++应用程序的Windows XP游戏中的鼠标光标。p> 要更改光标,我正在使用SetCursor()并传入所需的光标,该光标正在工作。但是,在调用peek message()的while循环中,光标会不断重置回默认箭头 这是有问题的循环: MSG msg; while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMes
SetCursor()
并传入所需的光标,该光标正在工作。但是,在调用peek message()
的while循环中,光标会不断重置回默认箭头
这是有问题的循环:
MSG msg;
while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
调试时,我发现在调用peek message()
期间光标发生了变化,之后msg.message==0x200,这将使消息成为以下消息之一:
WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200
我还没有找到任何关于为什么会发生这种情况的信息,也没有使用windows消息的经验
谢谢
编辑:
根据这一点,每次鼠标移动时,系统都会重新绘制类光标,有效地将其设置回默认光标。考虑到这一点,我将其添加到窗口消息回调函数中:
case WM_SETCURSOR:
return 0;
问题已解决。您是如何调试的?除非您使用SoftIce或其他不共享windows鼠标指针的应用程序,否则很难将调试器与应用程序隔离。我只是使用键盘进行调试。鼠标停留在应用程序窗口上。这样我就可以看到它在代码中的变化。我认为这是不可靠的。调试器仍在影响指针。如果在不调试的情况下运行应用程序会发生什么?那么它不起作用了吗?它仍然会发生。如果我
system(“pause”)
在消息循环后启动应用程序,我可以看到光标已更改,因此尽管特定消息可能不正确,但它仍必须发生在那里的某个地方。您是否遵循管理光标形状的规则?请特别注意,当您完成后,将其更改回原来的状态。嘿,链接不错。尽管我已经阅读了该页面,但这一部分现在很突出:“如果类游标不为NULL,则每次移动鼠标时系统都会恢复类游标”,这正是发生的情况。谢谢你!