我试图将触摸输入转换为鼠标输入。但是现在我遇到了一个奇怪的问题,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
最佳答案
已解决,其他人可能会觉得有帮助。
- 停止使用 set pos 函数
使用发送输入 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/