画面の座標に相対的なマウスの位置を取得したい。私はそれを行うために次のコードを使用しています。マウスの移動がWPFのメインウィンドウ外でトリガーされない
window.PointToScreen(Mouse.GetPosition(window));
期待どおり動作しています。しかし、私のMouseMoveイベントはMainWindowの外側で発射されません。つまり、ウィンドウを復元してデスクトップ上にマウスを移動した場合です。
感謝しています。
画面の座標に相対的なマウスの位置を取得したい。私はそれを行うために次のコードを使用しています。マウスの移動がWPFのメインウィンドウ外でトリガーされない
window.PointToScreen(Mouse.GetPosition(window));
期待どおり動作しています。しかし、私のMouseMoveイベントはMainWindowの外側で発射されません。つまり、ウィンドウを復元してデスクトップ上にマウスを移動した場合です。
感謝しています。
CaptureMouse()メソッドを使用します。上記のご例えば
、あなたが追加することができます:MouseDownイベントハンドラ内のコードビハインドで
window.CaptureMouse();
を。
その後、呼び出す必要があります:
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();
}
}
素晴らしいです!
非常に役に立ちます!ありがとう – DevEstacion