c++ - PeekMessage() 重置鼠标光标

标签 c++ cursor peekmessage

我目前正忙于在 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/

相关文章:

android - 如何用字符串定义游标值?

javascript - SVG 光标不响应标签

c# - 具有无限超时的 Peek MSMQ 消息

c++ - “Node”仅在一个源文件C++中模棱两可

c# - 通过 C++ 64 位 dll 在 64 位 .net 应用程序中调用 PInvoke

c++ - 局部静态对象的静态破坏

c++ - 如何为 C++ 创建 EDE 项目

sql - 引用匿名 block 中的游标

c++ - GetMessage/PeekMessage - 删除消息队列中的所有消息

c# - WinApi - PeekMessage 始终返回 False