画面上で現在のマウスの調整を取得する方法は? 要素のmousePositionを取得するものしか知らないMouse.GetPosition()
のですが、要素を使わずに座標を取得したいです。
145453 次
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 に答える