c++ - 移动时鼠标光标消失

标签 c++ winapi mouse

我试图将触摸输入转换为鼠标输入。但是现在我遇到了一个奇怪的问题,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 Visual Studio 2013

最佳答案

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

  1. 停止使用 set pos 函数
  2. 使用发送输入 Action

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

关于c++ - 移动时鼠标光标消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023284/

相关文章:

c++ - LNK2019 DirectX 无法解析的外部符号;文件 dxerr.lib

c++ - 在链表 C++ 的索引处插入一个元素

delphi - 来自已提升应用程序的 UAC 提示

android - 设置 > 语言和输入 > 指针速度 - 为什么我们需要这个菜单?

c++ - shared boost::shared_ptr<> 变量是线程安全的吗?

c++ - 方法范围外取消引用的 char[] 指针的有效性

c++ - 在 MFC 组合框中设置文本而不将其添加到列表中

c - Switch 语句用法 - C

java - 如何在java中以全屏独占模式处理来自键盘和鼠标的事件?

javascript - KineticJS:从圆上的 'click' 事件获取鼠标按钮、x 和 y