【发布时间】:2012-04-26 09:13:24
【问题描述】:
我想获取鼠标相对于屏幕坐标的位置。我正在使用以下代码来执行此操作。
window.PointToScreen(Mouse.GetPosition(window));
它按预期工作。但是我的 MouseMove 事件没有在 MainWindow 之外触发。也就是说,如果我将鼠标移到桌面上并恢复我的窗口。
任何想法表示赞赏。
【问题讨论】:
我想获取鼠标相对于屏幕坐标的位置。我正在使用以下代码来执行此操作。
window.PointToScreen(Mouse.GetPosition(window));
它按预期工作。但是我的 MouseMove 事件没有在 MainWindow 之外触发。也就是说,如果我将鼠标移到桌面上并恢复我的窗口。
任何想法表示赞赏。
【问题讨论】:
使用 CaptureMouse() 方法。
对于上面的示例,您可以添加:
window.CaptureMouse();
在 MouseDown 事件处理程序内的代码隐藏中。
然后你需要调用:
window.ReleaseMouseCapture();
在 MouseUp 事件处理程序内的代码隐藏中。
【讨论】:
无论按下任何鼠标按钮,我都需要能够在 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();
}
}
效果很好!
【讨论】: