Come ottenere la coordinazione del mouse corrente sullo schermo? Conosco solo Mouse.GetPosition()
che ottiene mousePosition di elemento, ma voglio ottenere il coordinamento senza usare l'elemento.Come posso ottenere le coordinate dello schermo del mouse in WPF?
risposta
dare seguito alla risposta di Rachel.
Ecco due modi in cui è possibile ottenere le Coordinate dello schermo del mouse in WPF.
1.Utilizzo di Windows Form. Aggiungere un riferimento a System.Windows.Forms
public static Point GetMousePositionWindowsForms()
{
System.Drawing.Point point = Control.MousePosition;
return new Point(point.X, point.Y);
}
2.Tramite 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);
}
Se corretto, se si prendono le coordinate X e Y non elaborate e si imposta la posizione di una finestra che le utilizza, non funzionerà correttamente se le impostazioni DPI non sono al 100% (96 dpi). L'ultima risposta alla domanda è corretta! – user195275
Il tuo commento è completamente vero e questo non dovrebbe essere contrassegnato come la risposta corretta di questa domanda! – Arash
Vuoi le coordinate relative allo schermo o all'applicazione?
Se è all'interno dell'applicazione basta usare:
Mouse.GetPosition(Application.Current.MainWindow);
In caso contrario, io credo che si possa aggiungere un riferimento a System.Windows.Forms
ed impiego:
System.Windows.Forms.Control.MousePosition;
Deve essere System.Windows.Forms.Control.MousePosition –
O in puro WPF usare PointToScreen.
Questo. Bello e pulito. –
"Converte un punto che rappresenta il sistema di coordinate corrente del Visual in un punto nelle coordinate dello schermo.". Che cosa ha a che fare con la posizione del mouse? –
Mouse.GetPosition restituisce un punto e PointToScreen converte il punto nella coordinata dello schermo. – erikH
Se si provano molte di queste risposte su risoluzioni diverse, computer con più monitor, ecc. Si potrebbe scoprire che non funzionano in modo affidabile. Questo perché è necessario utilizzare una trasformazione per ottenere la posizione del mouse relativa alla schermata corrente, non l'intera area di visualizzazione che consiste di tutti i monitor. Qualcosa del genere ... (dove "questa" è una finestra 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);
}
Grazie! Stavo avendo problemi con gli schermi ad alta risoluzione e la trasformazione sembra funzionare meravigliosamente. – mdiehl13
@ mdiehl13 Nessun problema :) felice di aver trovato le mie trasformazioni funzionanti okay – Alexandru
@ mdiehl13 Chiaramente, molte persone testano solo il caso base. +1 per testare risoluzioni diverse e simili. :) – Alexandru
Questo funziona senza dover utilizzare moduli o importare qualsiasi 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);
}
È possibile utilizzare combinazione di TimerDispatcher (WPF timer analogico) e "ganci" di Windows per la cattura di posizione del cursore dal sistema operativo.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT pPoint);
Punto è una luce struct
. Contiene solo i campi 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;
}
}
Questa soluzione è anche risolvendo il problema con la lettura dei parametri troppo spesso o troppo poco frequenti in modo da poter regolare da soli. Ma ricorda il sovraccarico del metodo WPF con un arg che rappresenta ticks
non milliseconds
.
TimeSpan(50); //ticks
- 1. Come ottenere le coordinate dello schermo da UILongPressGestureRecognizer
- 2. Come funzionano le coordinate dello schermo Android?
- 3. Come ottenere la posizione del mouse sullo schermo in WPF?
- 4. Ottieni le coordinate dello schermo dell'elemento DOM
- 5. Converti le coordinate dello schermo in coordinate OpenGL
- 6. Come ottenere le coordinate globali dello schermo del testo attualmente selezionato tramite le API di accessibilità.
- 7. come ottenere le coordinate del clic del mouse all'esterno della finestra in Java
- 8. Come ottenere la direzione del mouse da coordinate del mouse
- 9. Ottenere coordinate mouse in Swift
- 10. Come ottenere le coordinate dello schermo corrispondenti all'intero schermo e non alla vista toccata?
- 11. WPF Mouse down evento no Coordinate
- 12. Come posso ottenere l'orientamento dello schermo corrente?
- 13. Come posso ottenere le coordinate di posizione del mouse corrente (puntatore) in X
- 14. Android ottenere le dimensioni dello schermo dell'orientamento dello schermo
- 15. Come posso ottenere le mie coordinate del cursore in Firefox?
- 16. Android: come ottenere le dimensioni reali dello schermo del dispositivo?
- 17. Come convertire le coordinate dello schermo per formare le coordinate relative (winform)?
- 18. Come posso ottenere le coordinate del mouse relative a un div padre? Javascript
- 19. JFreeChart ottiene le coordinate del mouse
- 20. Coordinate dello schermo Android OpenGL ES 2.0 alle coordinate mondiali
- 21. Trasforma le coordinate del listener del mouse in coordinate del grafico
- 22. Ottenere le coordinate in coordinate
- 23. Coordinate del mouse relative al fotogramma
- 24. Come ottenere le coordinate dello schermo della vista InfoWindow di una mappa
- 25. Come posso ottenere il centro dello schermo in cocos2d?
- 26. Come trasformare il mondo 2D in coordinate dello schermo OpenGL
- 27. Come ottenere le dimensioni dello schermo da xaml?
- 28. Come posso ingrandire una finestra WPF sullo schermo con il cursore del mouse?
- 29. Converti le coordinate del mouse in un piano 3D
- 30. Come posso ottenere la risoluzione dello schermo in R
Coordinate del mouse relative a cosa? Coordinate dello schermo, relative ad una finestra? –
I indica la posizione del mouse sullo schermo. –