c# - Redireccionamiento/reasignación/prefiltrado de la entrada del cursor desde la pantalla táctil
windows-7 touch (2)
La instalación de un gancho para mouse de bajo nivel podría funcionar, ya que las pantallas táctiles anteriores a Windows 8 generalmente intentan enmascararse como ratones lo mejor que pueden.
Ver, por ejemplo, http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
MI PROBLEMA
Bien, bueno, la respuesta básica a esto sería usar:
Cursor.Clip = new Rectangle(x1, y1, x2, y2);
Pero mi problema es un poco más complicado.
Lo que necesito que haga es asignarse correctamente a unos límites de ventanas específicos para que la entrada táctil se restrinja a esa ventana, pero se enganche correctamente a la ventana para que cuando toque la esquina superior izquierda o la esquina inferior derecha esquina de la pantalla táctil, colocará el cursor en la parte superior izquierda o inferior derecha de la ventana. El uso de Cursor.Clip
no lo hará y todo lo que toque en la pantalla táctil que fuera de esa zona de recorte solo se asignará al borde más cercano de la ventana desde donde estoy tocando.
¿Hay algo que me permita filtrar previamente la posición del mouse para que pueda ajustar sus límites correctamente?
SI TODO LO DEMÁS FALLA
Alternativamente, podría intentar encontrar algún código que convierta la alimentación del mouse en la entrada TUIO y lo incorpore a la aplicación de esa manera, pero esperaba que no tuviera que hacerlo. Entonces, si alguien sabe cómo puedo hacer eso, sería útil si mi solicitud original no es posible.
PARA AQUELLOS QUE QUIEREN SABER EXACTAMENTE LO QUE HAGO
Si necesita saber exactamente por qué hago esto, básicamente estoy tratando de alimentar los eventos del mouse desde una pantalla táctil que se alimenta en video a una aplicación 3D que puede recibir entradas táctiles (a través de los eventos normales del mouse o TUIO) que dibujarán para ese video, pero no tiene forma de maximizar a la resolución completa de la pantalla porque solo renderizará el tamaño en el que está configurado para emitir.
PARA SER CLARO
- No me importa que un ratón normal sea interrumpido por nada de esto.
- Estoy hablando de un sistema Windows 7 que usa el Windows 7 Touch predeterminado
- La entrada llega a través de USB, no en serie ni nada de eso.
Puedes usar las extensiones reactivas para recortar los eventos táctiles.
var movingEvents =
Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(
h => this.MouseMove += h, h => this.MouseMove -= h)
.Select(x => x.EventArgs.Location)
.Where(location =>
location.X >= viewPort.Location.X
&& location.X <= viewPort.Location.X + viewPort.Width
&& location.Y >= viewPort.Location.Y
&& location.Y <= viewPort.Location.Y + viewPort.Height);
movingEvents.Subscribe(update);
public void update(Point p)
{
textBox1.Text = p.ToString();
}
http://www.codeproject.com/Articles/52308/The-Rx-Framework-By-Example