2012-04-26 34 views
5

Tôi muốn nhận vị trí chuột liên quan đến tọa độ màn hình. Tôi đang sử dụng mã sau đây để làm điều đó.Di chuyển chuột không kích hoạt bên ngoài WPF Cửa sổ chính

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

Nó hoạt động như mong đợi. Nhưng sự kiện MouseMove của tôi không kích hoạt bên ngoài MainWindow. Đó là nếu tôi di chuyển chuột qua máy tính để bàn với cửa sổ của tôi được khôi phục.

Bất kỳ ý tưởng nào được đánh giá cao.

Trả lời

8

Sử dụng phương pháp CaptureMouse().

Ví dụ bạn ở trên, bạn có thể thêm:

window.CaptureMouse(); 

trong bạn code-behind bên trong xử lý sự kiện MouseDown.

Sau đó, bạn cần phải gọi:

window.ReleaseMouseCapture(); 

trong bạn code-behind bên trong xử lý sự kiện MouseUp.

+0

Rất hữu ích! cảm ơn – DevEstacion

1

Tôi cần có khả năng chụp vị trí chuột bên ngoài cửa sổ WPF bất kể bạn đã nhấn nút chuột nào. Tôi đã kết thúc bằng cách sử dụng Interop để gọi một WINAPI GetCursorPos kết hợp với một sợi thay vì một sự kiện cho cửa sổ.

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(); 
    } 
} 

Hoạt động tuyệt vời!

+0

Giao diện người dùng bị khóa ... – pix

+0

Rất tiếc, tôi đã ngủ (0) đó là lỗi rõ ràng, thay đổi nó thành một cái gì đó khác như 100, tùy thuộc vào cập nhật ur – Peheje

Các vấn đề liên quan