移动时鼠标光标消失

时间:2014-04-11 21:59:01

标签: c++ winapi mouse

我试图将Touch输入转换为鼠标输入。但现在我有一个奇怪的问题,ShowCursor函数随机工作。

这是我的代码的一部分

case ETouchMove:
    if (mInMove)
    {
        int X = Point->Move.X;
        int Y = Point->Move.Y;
        mCursor.X = ((mCursorBak.X + mSpeed*X) < GetSystemMetrics(SM_CXSCREEN) 
                  && (mCursorBak.X + mSpeed*X) >0)
                    ? mCursorBak.X + mSpeed*X : 0;
        mCursor.Y = ((mCursorBak.Y + mSpeed*Y) < GetSystemMetrics(SM_CXSCREEN) 
                   && (mCursorBak.Y + mSpeed*Y) >0) 
                     ? mCursorBak.Y + mSpeed*Y : 0;

        SetCursorPos(mCursor.X, mCursor.Y);
        SetPhysicalCursorPos(mCursor.X, mCursor.Y);
        ShowCursor(true);
    }
    break; 

它有时可行,但大多数时候光标在移动过程中不会显示。我在MSDN页面上看到有人说这个函数只适用于同一个线程创建的窗口。然而,尝试后似乎没有区别。

似乎我一直在接收WINS中的新功能CURSOR_SUPPRESSED。反正有没有抑制,因为它仍然有效吗? 我也搜索了stackoverflow,但似乎还没有答案,是否有人可以给出一些提示?提前感谢。

在没有鼠标的平板电脑上工作 win8.1 视觉工作室2013

1 个答案:

答案 0 :(得分:2)

解决了,其他人可能会觉得有帮助。

  1. 停止使用set pos功能
  2. 使用sendinput运动

        //SetCursorPos(mCursor.X, mCursor.Y);
        //SetPhysicalCursorPos(mCursor.X, mCursor.Y);
        //ShowCursor(true);
    
        INPUT Command = { 0 };
        Command.type = INPUT_MOUSE;
        Command.mi.time = 0;
        Command.mi.dx = (mCursor.X * 65536) / GetSystemMetrics(SM_CXSCREEN);
        Command.mi.dy = (mCursor.Y * 65536) / GetSystemMetrics(SM_CYSCREEN);
        Command.mi.mouseData = 0;
        Command.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
        SendInput(1, &Command, sizeof(INPUT));