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

时间:2012-01-10 15:46:40

标签: c# wpf mouse

当我没有远程控制鼠标时鼠标停止,但现在我远程控制光标。现在,我无法得到鼠标停止的那一刻,因为它永远不会停止,它总是移动一点点。我的想法是添加一些偏移像素。例如5 px,即使鼠标移动大约5 px,也会说鼠标停止了。

这是代码捕捉鼠标停止的一部分。它会触发一个计时器。我没有在这里放置计时器代码。

 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 px噪音的那一刻,您有什么想法?

1 个答案:

答案 0 :(得分:1)

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

您可以使用系统参数MinimumVerticalDragDistance和MinimumHorizo​​ntalDragDistance。

见这里:http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.minimumverticaldragdistance.aspx

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

以下是它的使用方法:

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