2012-04-26 20 views
5

画面の座標に相対的なマウスの位置を取得したい。私はそれを行うために次のコードを使用しています。マウスの移動がWPFのメインウィンドウ外でトリガーされない

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

期待どおり動作しています。しかし、私のMouseMoveイベントはMainWindowの外側で発射されません。つまり、ウィンドウを復元してデスクトップ上にマウスを移動した場合です。

感謝しています。

答えて

8

CaptureMouse()メソッドを使用します。上記のご例えば

、あなたが追加することができます:MouseDownイベントハンドラ内のコードビハインドで

window.CaptureMouse(); 

を。

その後、呼び出す必要があります:

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)それは間違いの間違いです。 – Peheje

関連する問題