在处理WM_SETCURSOR窗口消息时,我将SetCursor调用到某个游标。如果我将光标设置为与其不同的东西,它会等待鼠标通过移动或点击来实际设置输入。
有没有办法对此进行计数,因此在光标输入之前,光标在视觉上看起来不会出错?
case WM_SETCURSOR:
{
SetCursor( game->GetCursor() ); // Returns m_curCurrent
return true;
}
break;
我还希望在更改时设置光标类型。
在游戏初始化期间:
m_curDefault = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DEFAULT_CURSOR ));
m_curAttack = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_ATTACK_CURSOR ));
m_curMove = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_MOVE_CURSOR ));
m_curCurrent = m_curDefault;
设置光标类型
时void Game::SetCursorType( CursorTypes curType )
{
switch ( curType )
{
case CGame::DefaultCursor:
m_curCurrent = m_curDefault;
break;
case CGame::AttackCursor:
m_curCurrent = m_curAttack;
break;
case CGame::MoveCursor:
m_curCurrent = m_curMove;
break;
default:
break;
}
}
答案 0 :(得分:1)
也许为时已晚,但无论如何,这对我有帮助。
当我更改了用于选择正确光标图像的所有条件时,我发送了以下内容: PostMessage(HWND_Object,WM_SETCURSOR,0,0);
显然在移动鼠标之前没有调用WM_SETCURSOR,但发送此消息帮助我解决了这个问题。
答案 1 :(得分:0)
我认为您需要在程序开始时使用WM_SETCURSOR获取鼠标,然后它将使用鼠标。
RAWMOUSE根据鼠标的原始分辨率为您提供鼠标的逻辑坐标。
也就是说,您可以看到鼠标的实际移动。
Windows将使用鼠标速度和加速度(弹道)设置来更新光标位置。因为当然两者没有联系 - 必须解释鼠标的明显移动以产生光标移动,否则如何支持多个鼠标?
如果您希望控制指针,据我所知,没有理由复制Windows鼠标弹道计算。只是让窗户做到这一点。因此,为了控制指针,您应该只使用WM_MOUSEMOVE。也就是说,除非您希望在应用程序中禁用鼠标加速设置。
但是,如果你想控制玩家的POV(观点),或者使用鼠标来控制游戏中的物体,例如宇宙飞船的飞行轭,那么RAWMOUSE数据可以让你获得最佳的机芯鼠标,你可以实现自己的算法,将其转换为飞行轭/ POV运动。
答案 2 :(得分:0)
我的应用程序中遇到了类似的问题。我现在仍未找到确切的原因,但是有一个解决此问题的简便方法。使用SetCursorPos函数,它将自动调用光标移动功能。因此,获取当前光标位置,然后从SetCursor函数返回后再次进行设置。下面是示例代码:
POINT p;
if (::GetCursorPos(&p))
{
SetCursorPos(p.x,p.y);
}