2012-04-26 5 views
5

화면 좌표를 기준으로 마우스 위치를 가져 오려고합니다. 나는 그것을하기 위해 다음 코드를 사용하고있다.마우스 이동이 WPF 외부에서 트리거되지 않음

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

예상대로 작동합니다. 하지만 내 MouseMove 이벤트는 MainWindow 외부에서 실행되지 않습니다. 내 창을 복원 한 상태에서 마우스를 바탕 화면 위로 옮기면됩니다.

감사합니다.

답변

8

CaptureMouse() 메서드를 사용하십시오. 위의 예를 들어

, 당신은 추가 할 수

window.CaptureMouse(); 

당신의 코드 숨김 MouseDown 이벤트 핸들러 내부.

window.ReleaseMouseCapture(); 

당신의 코드 숨김 MouseUp 이벤트 핸들러 내부 :

당신은 호출해야합니다.

+0

매우 유용합니다! 덕분에 – DevEstacion

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

UI가 잠겼습니다 ... – pix

+0

죄송합니다. 잠들었습니다 (0) 그것은 명백한 실수입니다. UR 업데이트에 따라 100과 비슷한 다른 것으로 변경하십시오. – Peheje

관련 문제