Как устранить пиксельные шумы от движений мыши в C # WPF - PullRequest
2 голосов
/ 10 января 2012

Я получил момент, когда мышь остановилась, когда я не управлял удаленно, но теперь я управляю курсором удаленно.Прямо сейчас я не могу получить момент, когда мышь останавливается, потому что она никогда точно не останавливается, она всегда немного движется.Моя идея состоит в том, чтобы добавить несколько смещенных пикселей.Например, 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 пикселей?

1 Ответ

1 голос
/ 11 января 2012

Как и просили в комментариях, вот пример:

Вы можете использовать системные параметры MinimumVerticalDragDistance и MinimumHor horizontalDragDistance.

Смотрите здесь: http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.minimumverticaldragdistance.aspx

Первоначально они используются в качестве порогового значения в операциях перетаскивания, чтобы определить, действительно ли перетаскивание начинается, или пользователь только щелкал и перемещал указатель мыши на очень маленькое расстояние.

Вот как это можно использовать:

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);
}

НТН

...