我试图将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
答案 0 :(得分: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));