WPF에서 현재 마우스 화면 좌표를 가져오려면 어떻게 해야 합니까?
화면에서 현재 마우스 조정을 가져오는 방법은 무엇입니까?나만 알고 있습니다.Mouse.GetPosition()
요소의 mousePosition을 얻지만 요소를 사용하지 않고 조정을 받고 싶습니다.
또는 순수 WPF에서는 PointToScreen을 사용합니다.
샘플 도우미 방법:
// Gets the absolute mouse position, relative to screen
Point GetMousePos() => _window.PointToScreen(Mouse.GetPosition(_window));
Rachel의 답변을 따라가기 위해.
WPF에서 마우스 화면 좌표를 가져올 수 있는 두 가지 방법이 있습니다.
1. Windows 양식 사용.시스템에 참조를 추가합니다.창문들.양식
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);
}
화면 또는 응용 프로그램에 상대적인 좌표를 원하십니까?
애플리케이션 내에 있는 경우 다음을 사용합니다.
Mouse.GetPosition(Application.Current.MainWindow);
그렇지 않다면 다음에 참조를 추가할 수 있다고 생각합니다.System.Windows.Forms
및 사용:
System.Windows.Forms.Control.MousePosition;
여러 해상도, 여러 모니터가 있는 컴퓨터 등에 대해 이러한 답변을 많이 시도하면 신뢰성 있게 작동하지 않을 수 있습니다.이는 모든 모니터로 구성된 전체 보기 영역이 아니라 현재 화면을 기준으로 마우스 위치를 얻으려면 변환을 사용해야 하기 때문입니다.이런 거...(여기서 "이 창"은 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);
}
이렇게 하면 양식을 사용하거나 DLL을 가져올 필요가 없습니다.
using System.Windows;
using System.Windows.Input;
/// <summary>
/// Gets the current mouse position on screen
/// </summary>
private Point GetMousePosition()
{
// Position of the mouse relative to the window
var position = Mouse.GetPosition(Window);
// Add the window position
return new Point(position.X + Window.Left, position.Y + Window.Top);
}
TimerDispatcher(WPF Timer 아날로그)와 Windows "Hooks"를 함께 사용하여 운영 체제에서 커서 위치를 파악할 수 있습니다.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT pPoint);
점은 빛입니다.struct
X, Y 필드만 포함됩니다.
public MainWindow()
{
InitializeComponent();
DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Tick += new EventHandler(timer_tick);
dt.Interval = new TimeSpan(0,0,0,0, 50);
dt.Start();
}
private void timer_tick(object sender, EventArgs e)
{
POINT pnt;
GetCursorPos(out pnt);
current_x_box.Text = (pnt.X).ToString();
current_y_box.Text = (pnt.Y).ToString();
}
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
또한 이 솔루션은 매개 변수 판독치를 너무 자주 읽거나 자주 읽지 않는 문제를 해결하여 사용자가 직접 조정할 수 있도록 합니다.그러나 WPF 방법 오버로드에 대해 기억하십시오. 하나의 arg는 다음을 나타냅니다.ticks
것은 아니다.milliseconds
.
TimeSpan(50); //ticks
만약 당신이 1개의 라이너를 찾고 있다면, 이것은 좋습니다.
new Point(Mouse.GetPosition(mWindow).X + mWindow.Left, Mouse.GetPosition(mWindow).Y + mWindow.Top)
그+ mWindow.Left
그리고.+ mWindow.Top
사용자가 창을 끌어다 놓을 때도 위치가 올바른지 확인합니다.
Mouse.GetPosition(mWindow)
선택한 매개 변수에 상대적인 마우스 위치를 제공합니다. mWindow.PointToScreen()
위치를 화면을 기준으로 한 점으로 변환합니다.
그렇게mWindow.PointToScreen(Mouse.GetPosition(mWindow))
화면을 기준으로 한 마우스 위치를 제공합니다.mWindow
는 창(즉, 에서 파생된 모든 클래스)입니다.System.Windows.Media.Visual
WPF 창 클래스 내에서 이 기능을 사용하는 경우,this
작동해야 합니다.
이 코드를 사용하고 싶습니다.
Point PointA;
private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e) {
PointA = e.MouseDevice.GetPosition(sender as UIElement);
}
private void Button_Click(object sender, RoutedEventArgs e) {
// use PointA Here
}
언급URL : https://stackoverflow.com/questions/4226740/how-do-i-get-the-current-mouse-screen-coordinates-in-wpf
'programing' 카테고리의 다른 글
App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다. (0) | 2023.04.29 |
---|---|
mongodb 집계 정렬 (0) | 2023.04.29 |
특정 셀 아파치 poi 3.9의 글꼴 색 변경 방법 (0) | 2023.04.29 |
iOS에서 HTML을 NSA 속성 문자열로 변환 (0) | 2023.04.29 |
Microsoft Azure 웹 사이트 - 사용자 정의 도메인 메일 (0) | 2023.04.29 |