【问题标题】:Mouse Move not trigger outside WPF Main Window鼠标移动不会在 WPF 主窗口外触发
【发布时间】:2012-04-26 09:13:24
【问题描述】:

我想获取鼠标相对于屏幕坐标的位置。我正在使用以下代码来执行此操作。

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

它按预期工作。但是我的 MouseMove 事件没有在 MainWindow 之外触发。也就是说,如果我将鼠标移到桌面上并恢复我的窗口。

任何想法表示赞赏。

【问题讨论】:

    标签: wpf mouse capture


    【解决方案1】:

    使用 CaptureMouse() 方法。

    对于上面的示例,您可以添加:

    window.CaptureMouse();
    

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

    然后你需要调用:

    window.ReleaseMouseCapture();
    

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

    【讨论】:

      【解决方案2】:

      无论按下任何鼠标按钮,我都需要能够在 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)这是明显的错误,将其更改为 100 之类的其他值,具体取决于您的更新
      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2014-06-19
      • 2012-02-04
      • 2020-01-09
      • 2013-07-23
      相关资源
      最近更新 更多