Как мне использовать CaptureMouse или Mouse.Capture в моем приложении C # WPF? - PullRequest
17 голосов
/ 13 января 2009

Я хочу получить доступ к координатам мыши независимо от того, находится ли курсор над окном моего приложения.

Когда я использую Mouse.Capture (IInputElement) или UIElement.CaptureMouse (), оба не могут захватить мышь и возвращают false.

В чем может быть моя проблема?

Файл cs для моего окна выглядит следующим образом:

using System.Windows;
using System.Windows.Input;

namespace ScreenLooker
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            bool bSuccess = Mouse.Capture(this);
            bSuccess = this.CaptureMouse();
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            tbCoordX.Text = e.GetPosition(this).X.ToString();
            tbCoordY.Text = e.GetPosition(this).Y.ToString();
            //System.Drawing.Point oPoint = System.Windows.Forms.Cursor.Position;
            //tbCoordX.Text = oPoint.X.ToString();
            //tbCoordY.Text = oPoint.Y.ToString();

            base.OnMouseMove(e);
        }
    }
}

1 Ответ

16 голосов
/ 13 января 2009

Элемент управления, переданный Mouse.Capture(), должен быть Видимый и Включен .

Попробуйте вставить Mouse.Capture в обработчик событий Loaded, например.

В XAML:

<Window ... .. .. Title="My Window" loaded="Window_Loaded">
...
</Window>

В коде:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
  var b = Mouse.Capture(this);
}

Я не захватывал все окно раньше, поэтому не уверен, как оно будет работать. Типичное использование это.

  1. MouseDown: - вызов Mouse.Capture() на дочернем контроле
  2. MouseMove: - Обработка координат X и Y мыши
  3. MouseUp: - вызвать Mouse.Capture(null), чтобы очистить захват событий мыши.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...