Mouse.Synchronize()在.Net中做什么?
MSDN说它“强制鼠标重新同步”
发布于 2011-03-30 15:43:20
只是我的假设:
类似的方法存在于Stylus类中:Stylus.Synchronize。它应该与Stylus.DirectlyOver一起使用,以确保手写笔指针仍然位于按钮上方,尽管按钮已移动到其他位置。
我相信在两个类的父类中都实现了同步:和Stylus这对Stylus很重要,但对鼠标来说不是必要的。我试过Stylus.Synchronize的例子(我刚刚把"Stylus“替换成了"Mouse”),它在没有Mouse.Synchronize();行的情况下也工作得很好。
发布于 2011-03-30 15:58:31
好的,这里值得一提的是该方法的源代码:
public void Synchronize()
{
PresentationSource criticalActiveSource = this.CriticalActiveSource;
if (((criticalActiveSource != null) && (criticalActiveSource.CompositionTarget != null)) && !criticalActiveSource.CompositionTarget.IsDisposed)
{
InputReportEventArgs args;
int tickCount = Environment.TickCount;
Point clientPosition = this.GetClientPosition();
RawMouseInputReport report = new RawMouseInputReport(InputMode.Foreground, tickCount, criticalActiveSource, RawMouseActions.AbsoluteMove, (int) clientPosition.X, (int) clientPosition.Y, 0, IntPtr.Zero);
report._isSynchronize = true;
if (this._stylusDevice != null)
{
args = new InputReportEventArgs(this._stylusDevice, report);
}
else
{
args = new InputReportEventArgs(this, report);
}
args.RoutedEvent = InputManager.PreviewInputReportEvent;
this._inputManager.Value.ProcessInput(args);
}
}重要的一点是:
RawMouseInputReport report = new RawMouseInputReport(InputMode.Foreground, tickCount, criticalActiveSource, RawMouseActions.AbsoluteMove, (int) clientPosition.X, (int) clientPosition.Y, 0, IntPtr.Zero);根据这一点,该方法试图将鼠标移动到它已经在的位置,然后分析结果--这是我自己的假设,如果在以前的位置和新的位置之间有任何偏移,它将被存储在某个地方,并用于任何未来的鼠标操作。
https://stackoverflow.com/questions/5482392
复制相似问题