Как получить доступ к событиям перемещения мыши в WPF независимо от того, где находится мышь? - PullRequest
1 голос
/ 15 января 2009

Я пытался использовать событие MouseMove для отслеживания положения мыши.

protected override void OnMouseMove(MouseEventArgs e)

Это работает, когда мышь находится над заданным элементом UIElement (в данном случае, окном моего приложения), однако я хотел бы получить доступ к этим данным независимо от того, где находится мышь, и предпочтительно даже независимо от того, имеет ли мое приложение фокус .

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

Кто-нибудь знает, как получить события MouseMove (или аналогичные) независимо от положения мыши?

Ответы [ 2 ]

2 голосов
/ 15 января 2009

Если вы хотите сделать это в рамках вашего приложения, вам следует использовать событие PreviewMouseMove. Ваш Window всегда получит это первым, прежде чем перейдет к дочерним элементам. Если вы обрабатываете MouseMove на уровне Window, то дочерние элементы могут пометить событие как обработанное, и поэтому вы можете никогда не получить событие.

Альтернативой использованию PreviewMouseMove является создание подкласса Window и присоединение обработчика класса к MouseMove и указание, что вы всегда хотите получать уведомления, независимо от того, помечал ли кто-либо событие как обработанное. Более подробная информация доступна здесь .

2 голосов
/ 15 января 2009

Вы можете запустить P / Invoke для функции Win32 GetCursorPos. Я думаю, что это будет самый надежный способ: GetCursorPos на MSDN .

Требуемое объявление DllImport можно найти здесь: http://www.pinvoke.net/default.aspx/user32/GetCursorPos.html

...