【问题标题】:Mouse Cursor disappears while moving移动时鼠标光标消失
【发布时间】:2014-04-12 06:21:57
【问题描述】:

我试图将触摸输入转换为鼠标输入。但是现在我有一个奇怪的问题,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 页面上看到有人说此功能仅适用于由同一线程创建的窗口。但是尝试后似乎没有区别。

似乎我不断收到 CURSOR_SUPPRESSED,这是 win8 中的新功能。反正有什么不受抑制的,因为它有时仍然有效吗? 我也搜索了stackoverflow,但似乎还没有答案,有人能给点建议吗?提前谢谢。

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

【问题讨论】:

    标签: c++ winapi mouse


    【解决方案1】:

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

    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));
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多