WPF에서 현재 마우스 화면 좌표를 어떻게 얻습니까?
화면에서 현재 마우스 조정을 얻는 방법은 무엇입니까? Mouse.GetPosition()
요소의 mousePosition을 얻는 것만 알고 있지만 요소를 사용하지 않고 조정을 얻고 싶습니다.
Rachel의 대답에 대한 후속 조치.
WPF에서 마우스 화면 좌표를 가져올 수있는 두 가지 방법이 있습니다.
1. Windows Forms 사용. System.Windows.Forms에 대한 참조 추가
public static Point GetMousePositionWindowsForms()
{
System.Drawing.Point 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()
{
Win32Point w32Mouse = new Win32Point();
GetCursorPos(ref w32Mouse);
return new Point(w32Mouse.X, w32Mouse.Y);
}
또는 순수 WPF에서는 PointToScreen을 사용 합니다 .
샘플 도우미 메서드 :
// Gets the absolute mouse position, relative to screen
Point GetMousePos(){
return _window.PointToScreen(Mouse.GetPosition(_window))
}
화면이나 응용 프로그램을 기준으로 좌표를 원하십니까?
응용 프로그램 내에 있으면 다음을 사용하십시오.
Mouse.GetPosition(Application.Current.MainWindow);
그렇지 않은 경우 참조를 추가 System.Windows.Forms
하고 사용할 수 있다고 생각합니다 .
System.Windows.Forms.Control.MousePosition;
다른 해상도, 여러 모니터가있는 컴퓨터 등에서 이러한 답변을 많이 시도하면 안정적으로 작동하지 않을 수 있습니다. 이는 모든 모니터로 구성된 전체보기 영역이 아니라 현재 화면을 기준으로 마우스 위치를 가져 오기 위해 변환을 사용해야하기 때문입니다. 이와 같은 것 ... ( "this"는 WPF 창).
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var mouse = transform.Transform(GetMousePosition());
public System.Windows.Point GetMousePosition()
{
System.Drawing.Point point = System.Windows.Forms.Control.MousePosition;
return new System.Windows.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 타이머 아날로그)와 Windows "후크"의 조합을 사용하여 운영 체제에서 커서 위치를 파악할 수 있습니다.
[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;
}
}
This solution is also resolving the problem with too often or too infrequent parameter reading so you can adjust it by yourself. But remember about WPF method overload with one arg which is representing ticks
not milliseconds
.
TimeSpan(50); //ticks
If you're looking for a 1 liner, this does well.
new Point(Mouse.GetPosition(mWindow).X + mWindow.Left, Mouse.GetPosition(mWindow).Y + mWindow.Top)
i add this for use with controls
private void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var mousepos = new List<double> { e.GetPosition(ControlName).X, e.GetPosition(ControlName).Y };
}
Mouse.GetPosition(mWindow)
gives you the mouse position relative to the parameter of your choice. mWindow.PointToScreen()
convert the position to a point relative to the screen.
So mWindow.PointToScreen(Mouse.GetPosition(mWindow))
gives you the mouse position relative to the screen, assuming that mWindow
is a window(actually, any class derived from System.Windows.Media.Visual
will have this function), if you are using this inside a WPF window class, this
should work.
참고URL : https://stackoverflow.com/questions/4226740/how-do-i-get-the-current-mouse-screen-coordinates-in-wpf
'Program Tip' 카테고리의 다른 글
클래스에서 모든 변수 값 인쇄 (0) | 2020.11.22 |
---|---|
목록 요소에서 \ n을 제거하는 방법은 무엇입니까? (0) | 2020.11.22 |
제출 후 유효성 검사 오류가 발생하면 p : dialog를 열어 둡니다. (0) | 2020.11.22 |
네트워크 유형이 2G, 3G 또는 4G인지 확인하는 방법 (0) | 2020.11.22 |
Bootstrap의 'popover'컨테이너에 동적으로 클래스 추가 (0) | 2020.11.22 |