如何在C#WPF中消除鼠标移动中的像素噪声

本文关键字:移动 像素 噪声 鼠标 C#WPF | 更新日期: 2023-09-27 18:19:51

当我没有远程控制时,鼠标停止了,但现在我远程控制光标。现在,我不知道鼠标停止的时刻,因为它从来没有完全停止过,它总是在移动一点。我的想法是添加一些偏移像素。例如5像素,即使鼠标在5像素左右移动,它也会说鼠标停止了。

这是代码的某些部分,用于捕捉鼠标停止的瞬间。它会触发计时器。我没有把计时器代码放在这里。

 mouse = new MouseKeyboardActivityMonitor.MouseHookListener(new GlobalHooker());
 mouse.MouseMove += (sd, args) =>
 {
      movingCount = 0;
      mouseLeft = args.X; //set the window.left to mouseLeft before showing it
      mouseTop = args.Y; //set the window.top to mouseTop before showing it
 };
 mouse.Enabled = true;

当鼠标在5像素噪音周围移动时,你有什么想法?

如何在C#WPF中消除鼠标移动中的像素噪声

根据评论中的要求,这里有一个例子:

可以使用系统参数MinimumVerticalDragDistance和MinimumHorizontalDragDistance。

请参见此处:http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.minimumverticaldragdistance.aspx

它们最初用作DragDrop操作中的阈值,用于检测拖动是否真的开始,或者用户是否只是单击并将鼠标指针移动了很小的距离。

以下是它的使用方法:

private Point _lastPosition;
private void Window_MouseMove(object sender, MouseEventArgs e)
{
  Point currentPosition = e.GetPosition(this);
  if (IsMovementBigEnough(_lastPosition, currentPosition))
  {
    // .. do stuff here 
  }
  _lastPosition = currentPosition;
}
public bool IsMovementBigEnough(Point previousMousePosition, Point currentPosition)
{
  return (Math.Abs(currentPosition.X - previousMousePosition.X) >= SystemParameters.MinimumHorizontalDragDistance ||
       Math.Abs(currentPosition.Y - previousMousePosition.Y) >= SystemParameters.MinimumVerticalDragDistance);
}

HTH