2011-06-13 16 views
7

Me gustaría plantear un evento de mouse (un clic, mousedown o mouseup) tomando el clic de un usuario en cualquier lugar en una ventana de WPF y traduciéndolo por una diferencia conocida, p. haga clic en x, y, levante el evento click en x + 100, y + 100.¿Cómo puedo generar un evento de mouse en WPF/C# con coordenadas específicas?

El problema subyacente es que hay un monitor de visualización que se mueve físicamente en relación con una pantalla táctil superpuesta. En lugar de volver a calibrar la pantalla táctil con cada movimiento, me gustaría agregar el desplazamiento de la traducción al evento click.

He examinado la API de Win32 para mouse_event y su función de reemplazo, SendInput. Admito que estoy perdido ya que no estoy muy familiarizado con la API.

Seguramente este es un problema simple de resolver, pero no puedo encontrar código de ejemplo en ninguna parte que me lleve a donde puedo implementar una solución. Cualquier ayuda, punteros o ejemplos sólidos de cómo agregar esto a mi código serán apreciados.

Gracias Marcos

+0

¿No puede hacer este ajuste en los manipuladores? –

Respuesta

8

Win32 API no funcionará con WPF, esto podría ayudar link

// Copied the snippet of code from the link above, just to help future readers 
MouseEventArgs e = new MouseEventArgs(Mouse.PrimaryDevice, 0); 
e.RoutedEvent = Mouse.MouseEnterEvent; 

youUIElement.RaiseEvent(e); 
// Or 
InputManager.Current.ProcessInput(e); 
+0

Gracias, Waleed, creo que esto me lleva un poco más adelante. Lo que todavía no entiendo, sin embargo, es cómo hacer la traducción. ¿Dónde especifico las nuevas coordenadas del cursor traducido en los argumentos del evento, e en el fragmento de arriba? Una vez que se configuran las coordenadas, ya que no conozco el elemento UI que estará debajo de las nuevas coordenadas (puede ser un espacio de ventana en blanco), ¿ProcessInput (e) automáticamente lo resuelve? ¿Debo configurar la estrategia de enrutamiento para hacer túneles o hacer otra cosa? –

+2

Bueno, debería usar Event Bubbling para capturar cada evento específico generado en un elemento secundario. una vez capturado, obtendrá una referencia al UIElement que provocó el evento, luego puede especificar las nuevas coordenadas y reenviarlas. para detectar si las coordenadas están fuera del área del cliente, simplemente intente: if (this.Clip.Bounds.Bottom> newY || this.Clip.Bounds.Left> newX dont) donde esto se refiere a su ventana principal – Waleed

Cuestiones relacionadas