2012-04-26 164 views
5

我想获得相对于屏幕坐标的鼠标位置。我正在使用下面的代码来做到这一点。鼠标移动不触发外部WPF主窗口

window.PointToScreen(Mouse.GetPosition(window)); 

它工作正常。但是我的MouseMove事件不会在MainWindow之外触发。这是如果我将我的鼠标移动到桌面上并恢复了我的窗口。

任何想法表示赞赏。

回答

8

使用CaptureMouse()方法。

对于你上面的例子,你可以添加:

window.CaptureMouse(); 

在您的代码隐藏MouseDown事件处理程序中。

然后你需要调用:

window.ReleaseMouseCapture(); 

在您的代码隐藏MouseUp事件处理程序中。

+0

非常有帮助!谢谢 – DevEstacion 2013-10-02 11:47:10

1

我需要能够捕捉WPF窗口之外的鼠标位置,而不管按下任意鼠标按钮的。我最终使用Interop来调用与线程结合的WINAPI GetCursorPos,而不是窗口的事件。

using System.Runtime.InteropServices; 
using Point = System.Drawing.Point; 

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetCursorPos(ref Point lpPoint); 

public MainWindow() 
    { 
     InitializeComponent(); 

     new Thread(() => 
     { 
      while (true) 
      { 
       //Logic 
       Point p = new Point(); 
       GetCursorPos(ref p); 

       //Update UI 
       Dispatcher.BeginInvoke(new Action(() => 
       { 
        Position.Text = p.X + ", " + p.Y; 
       })); 

       Thread.Sleep(100); 
      } 
     }).Start(); 
    } 
} 

很棒!

+0

用户界面被锁定... – pix 2016-03-23 19:10:01

+0

糟糕对不起我睡觉(0)这是显而易见的错误,将其更改为像100这样的东西,这取决于你的更新 – Peheje 2016-03-24 18:32:09

相关问题