75

画面上で現在のマウスの調整を取得する方法は? 要素のmousePositionを取得するものしか知らないMouse.GetPosition()のですが、要素を使わずに座標を取得したいです。

4

9 に答える 9

86

または、純粋な WPF ではPointToScreenを使用します。

サンプル ヘルパー メソッド:

// Gets the absolute mouse position, relative to screen
Point GetMousePos() => _window.PointToScreen(Mouse.GetPosition(_window));
于 2012-04-26T11:56:07.910 に答える
78

レイチェルの答えをフォローアップする。
WPF でマウス スクリーン座標を取得する方法は 2 つあります。

1.Windows フォームを使用する。System.Windows.Forms への参照を追加する

public static Point GetMousePositionWindowsForms()
{
    var point = Control.MousePosition;
    return new Point(point.X, point.Y);
}

2.Win32を使う

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetCursorPos(ref Win32Point pt);

[StructLayout(LayoutKind.Sequential)]
internal struct Win32Point
{
    public Int32 X;
    public Int32 Y;
};
public static Point GetMousePosition()
{
    var w32Mouse = new Win32Point();
    GetCursorPos(ref w32Mouse);

    return new Point(w32Mouse.X, w32Mouse.Y);
}
于 2010-11-20T10:31:28.343 に答える
30

画面またはアプリケーションに相対的な座標が必要ですか?

アプリケーション内にある場合は、次を使用します。

Mouse.GetPosition(Application.Current.MainWindow);

そうでない場合は、参照を追加して使用できると思いますSystem.Windows.Forms

System.Windows.Forms.Control.MousePosition;
于 2010-11-19T16:19:29.810 に答える
22

さまざまな解像度、複数のモニターを備えたコンピューターなどでこれらの回答を多数試してみると、確実に機能しない場合があります。これは、変換を使用して、すべてのモニターで構成される表示領域全体ではなく、現在の画面に対するマウスの位置を取得する必要があるためです。このようなもの...(「これ」はWPFウィンドウです)。

var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var mouse = transform.Transform(GetMousePosition());

public System.Windows.Point GetMousePosition()
{
    var point = Forms.Control.MousePosition;
    return new Point(point.X, point.Y);
}
于 2013-11-05T14:03:47.407 に答える
2

1ライナーを探しているなら、これはうまくいきます.

new Point(Mouse.GetPosition(mWindow).X + mWindow.Left, Mouse.GetPosition(mWindow).Y + mWindow.Top)

+ mWindow.Leftとは+ mWindow.Top、ユーザーがウィンドウをドラッグしても、位置が正しい場所にあることを確認します。

于 2018-10-02T04:52:11.620 に答える