Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una de las ventajas de la entrada de lápiz en un Tablet PC es que se asemeja mucho a la escritura normal con lápiz y papel. Para conseguirlo, el lápiz de Tablet PC recopila los datos de entrada a una velocidad muy superior a la del mouse y representa la entrada de lápiz mientras el usuario escribe. El subproceso de la interfaz de usuario de la aplicación no es suficiente para recopilar los datos del lápiz y representar la entrada de lápiz, porque se puede bloquear. Para resolverlo, una aplicación WPF usa dos subprocesos adicionales cuando un usuario escribe entrada de lápiz.
En la lista siguiente se describen los subprocesos que participan en la recopilación y representación de la entrada de lápiz digital:
Subproceso del lápiz, que es el que toma la entrada del lápiz. (En realidad, es un grupo de subprocesos, pero en este tema se le designa como subproceso del lápiz.)
Subproceso de interfaz de usuario de aplicación, que es el subproceso que controla la interfaz de usuario de la aplicación.
Subproceso de representación dinámica, que es el que representa la entrada de lápiz mientras el usuario dibuja un trazo. El subproceso de representación dinámica es diferente del subproceso que representa otros elementos de la interfaz de usuario para la aplicación, como se menciona en Modelo de subprocesos de Window Presentation Foundation.
El modelo de entrada de lápiz es el mismo si la aplicación usa InkCanvas o un control personalizado similar al de Creación de un control de entrada manuscrita. Aunque en este tema se analiza el subprocesamiento en lo que se refiere a InkCanvas, se aplican los mismos conceptos al crear un control personalizado.
Información general acerca del subprocesamiento
El diagrama siguiente ilustra el modelo de subprocesos cuando un usuario dibuja un trazo:
.png)
Acciones que suceden mientras el usuario dibuja el trazo
Cuando el usuario dibuja un trazo, los puntos del lápiz se incorporan al subproceso del lápiz. Los complementos del lápiz, incluido DynamicRenderer, aceptan los puntos del lápiz en el subproceso del lápiz y tienen la oportunidad de modificarlos antes de que InkCanvas los reciba.
DynamicRenderer representa los puntos del lápiz en el subproceso de representación dinámica. Esto sucede al mismo tiempo que el paso anterior.
InkCanvas recibe los puntos del lápiz en el subproceso de la interfaz de usuario.
Acciones que suceden después de que el usuario finaliza el trazo
Cuando el usuario termina de dibujar el trazo, InkCanvas crea un objeto Stroke y lo agrega a InkPresenter, que lo representa estáticamente.
El subproceso de la interfaz de usuario advierte a DynamicRenderer de que el trazo se representa estáticamente, por lo que DynamicRenderer quita su representación visual del trazo.
Recopilación de la entrada de lápiz y complementos del lápiz
Cada UIElement tiene una StylusPlugInCollection. Los objetos StylusPlugIn de StylusPlugInCollection reciben y pueden modificar los puntos del lápiz en el subproceso del lápiz. Los objetos StylusPlugIn reciben los puntos del lápiz según su orden en StylusPlugInCollection.
El diagrama siguiente ilustra la situación hipotética de que la colección StylusPlugIns de UIElement contenga stylusPlugin1, DynamicRenderer y stylusPlugin2, por ese orden.
.png)
En el diagrama anterior, se produce el siguiente comportamiento:
StylusPlugin1 modifica los valores de x e y.
DynamicRenderer recibe los puntos del lápiz modificados y los representa en el subproceso de representación dinámica.
StylusPlugin2 recibe los puntos del lápiz modificados y modifica una vez más los valores de x e y.
La aplicación recopila los puntos del lápiz y, cuando el usuario finaliza el trazo, lo representa estáticamente.
Supongamos que stylusPlugin1 restringe los puntos del lápiz a un rectángulo y stylusPlugin2 traslada los puntos del lápiz a la derecha. En el escenario anterior, DynamicRenderer recibe los puntos del lápiz restringidos, pero no los puntos del lápiz trasladados. Cuando el usuario dibuja el trazo, el trazo se representa dentro de los límites del rectángulo, pero el trazo no parece trasladarse hasta que el usuario levanta el lápiz.
Operaciones con un complemento de lápiz óptico en el subproceso de la interfaz de usuario
Dado que no se puede realizar una prueba de aciertos precisa en el subproceso del lápiz, algunos elementos podrían recibir ocasionalmente entrada del lápiz dirigida a otros elementos. Si necesita asegurarse de que la entrada se enrutó correctamente antes de realizar una operación, realice la operación en el método OnStylusDownProcessed, OnStylusMoveProcessedo OnStylusUpProcessed después de suscribirse al mismo. El subproceso de la aplicación invoca estos métodos una vez realizada una prueba de aciertos precisa. Para suscribirse a estos métodos, llame al método NotifyWhenProcessed en el método que se ejecuta en el subproceso del lápiz.
El diagrama siguiente ilustra la relación entre el subproceso del lápiz y subproceso de la interfaz de usuario con respecto a los eventos de lápiz de StylusPlugIn.
.png)
Representación de la entrada de lápiz
A medida que el usuario dibuja un trazo, DynamicRenderer representa la entrada de lápiz en un subproceso independiente, de forma que la entrada de lápiz parece "fluir" del lápiz cuando el subproceso de la interfaz de usuario no está disponible. DynamicRenderer genera un árbol visual en el subproceso de representación dinámica mientras recopila los puntos del lápiz. Cuando el usuario finaliza el trazo, DynamicRenderer solicita que se le notifique cuando la aplicación realice el siguiente paso de representación. Después de que la aplicación completa el siguiente paso de representación, DynamicRenderer borra su árbol visual. En el diagrama siguiente se muestra este proceso.
.png)
El usuario inicia el trazo.
- DynamicRenderer crea el árbol visual.
El usuario está dibujando el trazo.
- DynamicRenderer genera el árbol visual.
El usuario finaliza el trazo.
InkPresenter agrega el trazo a su árbol visual.
La capa de integración multimedia (MIL) representa los trazos estáticamente.
DynamicRenderer borra la representación visual.