Datos de complementos y clase RealTimeStylus
Los complementos de la clase RealTimeStylus deben implementar la interfaz IStylusSyncPlugin o IStylusAsyncPlugin , o ambas. Aunque tiene que implementar todos los métodos de interfaz del complemento, el complemento solo recibe llamadas en métodos marcados en la propiedad Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest .
Los métodos definidos en las interfaces usan objetos en el espacio de nombres Microsoft.StylusInput.PluginData para pasar los datos del lápiz a los complementos. En la tabla siguiente se describen los objetos de datos que son parámetros en los métodos de notificación y se muestra el valor DataInterestMask asociado a la notificación.
Datos del complemento | DataInterestMask Value | Descripción |
---|---|---|
CustomStylusData | CustomStylusDataAdded | Datos de aplicación personalizados que agrega un complemento. |
ErrorData | Error | Información de error que el objeto RealTimeStylus agrega en respuesta a una excepción no controlada en uno de sus complementos. |
InAirPacketsData | InAirPackets | Información de paquetes para el movimiento del lápiz óptico mientras el lápiz está en el aire sobre el digitalizador. |
PacketsData | Paquetes | Información de paquetes para el movimiento del lápiz óptico mientras el lápiz está tocando el digitalizador. |
RealTimeStylusDisabledData | RealTimeStylusDisabled | Información que el objeto RealTimeStylus agrega cuando se deshabilita. |
RealTimeStylusEnabledData | RealTimeStylusEnabled | Información que el objeto RealTimeStylus agrega cuando se habilita. |
StylusButtonDownData | StylusButtonDown | Información sobre el botón de lápiz óptico concreto que se está presionando. |
StylusButtonUpData | StylusButtonUp | Información sobre el botón de lápiz óptico concreto que se está liberando. |
StylusDownData | StylusDown | La información de paquetes de un lápiz óptico, ya que el lápiz óptico se pone en contacto con el digitalizador. |
StylusInRangeData | StylusInRange | Información sobre el lápiz óptico concreto que entra en el área de entrada del objeto RealTimeStylus o especifica el intervalo de detección del digitalizador encima del área de entrada del objeto RealTimeStylus . |
StylusOutOfRangeData | StylusOutOfRange | Información sobre el lápiz óptico determinado que sale del área de entrada del objeto RealTimeStylus o deja el intervalo de detección del digitalizador encima del área de entrada del objeto RealTimeStylus . |
StylusUpData | Lápiz óptico | Información de paquetes para un lápiz óptico, ya que el lápiz óptico se levanta del digitalizador. |
SystemGestureData | SystemGesture | Información que agrega el objeto RealTimeStylus cuando detecta un gesto del sistema. |
TabletAddedData | TabletAdded | Información sobre el objeto Tablet que se va a agregar. |
TabletRemovedData | TabletRemoved | Información sobre el objeto Tablet que se va a quitar. |
Para obtener información sobre cómo el objeto RealTimeStylus controla el flujo de datos del lápiz de tableta, vea Working with the RealTimeStylus Class.
Interés de los datos
El objeto RealTimeStylus comprueba la propiedad Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest de un complemento cuando se agrega el complemento a la colección de complementos sincrónica o asincrónica del objeto RealTimeStylus . Por lo tanto, debe usar la propiedad DataInterest para suscribirse a todas las notificaciones que usa este complemento, pero no a ninguna de las notificaciones que este complemento usa nunca. Para las notificaciones que el complemento solo usa ocasionalmente comprueban el estado del complemento en primer lugar y devuelven si el complemento no usa la notificación en su estado actual.
Un complemento solo recibe llamadas a métodos marcados en la propiedad Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest del complemento. Para obtener más información sobre los valores posibles de la propiedad DataInterest de un complemento, vea la enumeración DataInterestMask .
Control de tiempo
Los datos se ponen en cola en el objeto RealTimeStylus antes de pasarlos a los complementos de la colección de complementos asincrónica. En la lista siguiente se describen algunas situaciones que es posible que deba tener en cuenta al diseñar un complemento asincrónico.
- Cuando el objeto RealTimeStylus está deshabilitado, el complemento asincrónico puede recibir otras notificaciones en cola antes de llamar a su método RealTimeStylusDisabled . En esta situación, las llamadas desde el complemento a algunos de los métodos y propiedades del objeto RealTimeStylus producen una excepción. La información relevante para el complemento debe almacenarse en caché cuando el objeto RealTimeStylus está habilitado.
- El método ClearStylusQueues del objeto RealTimeStylus Puede quitar información de la cola de salida. Por lo tanto, los complementos asincrónicos no pueden depender de recibir todas las notificaciones pertinentes.
- Cuando se quita un objeto Tablet que está disponible para el objeto RealTimeStylus , el complemento asincrónico puede recibir una notificación de lápiz en cola para la tableta antes de llamar a su método TabletRemoved . En esta situación, llamar al método GetTabletPropertyDescriptionCollection del objeto RealTimeStylus no funciona. La información relevante para el complemento debe almacenarse en caché cuando el objeto RealTimeStylus está habilitado o cuando se agrega una nueva tableta.
En función de la aplicación, puede mejorar el rendimiento al deshabilitar un objeto RealTimeStylus . Cuando la propiedad Enabled del objeto RealTimeStylus se establece en FALSE, los datos de las colas de entrada y salida se procesan hasta que las colas están vacías. Puede llamar al método ClearStylusQueues del objeto RealTimeStylus para borrar las colas antes de deshabilitar el objeto RealTimeStylus.
Datos habilitados y deshabilitados
Cuando el objeto RealTimeStylus está habilitado, cada complemento recibe una llamada a su método Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled o Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusEnabled . El objeto RealTimeStylusEnabledData pasado en la notificación contiene una colección de los identificadores de contexto de las tabletas disponibles en el momento en que está habilitado el objeto RealTimeStylus .
Nota
Dado que los datos del complemento de la colección de complementos asincrónicas del objeto RealTimeStylus están en cola, los complementos asincrónicos pueden recibir datos antes de recibir una llamada a su método RealTimeStylusDisabled , pero después de deshabilitar el objeto RealTimeStylus . Tenga en cuenta que algunos de los métodos y propiedades del objeto RealTimeStylus producen una excepción si el objeto RealTimeStylus está deshabilitado.
El objeto RealTimeStylus llama a los métodos Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled y Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusDisabled en el subproceso desde el que se habilita o desde el que se agrega el complemento sincrónico.
Por lo general, agregue o quite complementos mientras el objeto RealTimeStylus está deshabilitado. Para obtener más información sobre cómo agregar y quitar complementos al objeto RealTimeStylus , vea Plug-ins y la clase RealTimeStylus.
Datos de tableta
Cuando una tableta que el objeto RealTimeStylus puede usar se agrega o quita del pc tablet mientras el objeto RealTimeStylus está habilitado, el objeto RealTimeStylus notifica a sus complementos que se ha agregado o quitado un objeto Tablet . Cada objeto RealTimeStylus mantiene una lista de identificadores únicos para los objetos tablet con los que puede interactuar. El objeto RealTimeStylus tiene dos métodos para traducir entre el identificador único y el objeto Tablet, los métodos GetTabletContextIdFromTablet y GetTabletFromTabletContextId .
Nota
La información sobre una tableta ya no está disponible en el objeto RealTimeStylus después de quitar la tableta del pc tablet.
Datos de lápiz de tableta
El objeto RealTimeStylus pasa información sobre el lápiz de tableta a sus complementos en varios métodos de notificación. La información sobre el lápiz de tableta se representa mediante un objeto Stylus . Este objeto es una instantánea del estado del lápiz de tableta en el momento en que se recopilaron los datos. Dado que los complementos reciben los datos del lápiz de tableta como parte del flujo de datos del lápiz de tableta, los complementos deben usar la información en el objeto Stylus en lugar de comprobar el estado actual de un lápiz de tableta determinado a través de la clase Cursor .
Cada objeto Stylus contiene el identificador de contexto de la tableta que generó los datos.
Datos de gestos del sistema
El objeto RealTimeStylus recibe datos sobre los gestos del sistema, ya que son reconocidos por el pc tablet. En la tabla siguiente se describe el orden en el que se producen los objetos SystemGestureData en el flujo de datos del lápiz de tableta en relación con otros datos de lápiz de tableta.
SystemGesture | Objetos que preceden al objeto SystemGestureData | Objetos que vienen después del objeto SystemGestureData |
---|---|---|
Pulsar | Objeto StylusDownData . |
Objeto StylusUpData . |
DoubleTap | El objeto StylusDownData , el objeto SystemGestureData para el gesto del sistema Tap y los objetos StylusUpData . |
Segundo objeto StylusDownData . |
RightTap | El objeto StylusDownData y el objeto SystemGestureData para el miembro HoldEnter de la enumeración SystemGesure . |
Objeto StylusUpData . |
Arrastrar | Objeto StylusDownData . |
Objeto StylusUpData . |
RightDrag | Objeto StylusDownData . |
Objeto StylusUpData . |
HoldEnter | Objeto StylusDownData . |
Objeto StylusUpData . Nota: Este gesto del sistema no se reconoce si el usuario inicia un gesto del sistema Drag o RightDrag . |
HoldLeave | Sin implementar. |
Sin implementar. |
HoverEnter | Varios objetos InAirPacketsData de baja velocidad media. |
Nota: Puede haber un retraso notable antes de recibir el gesto del sistema HoverEnter . El objeto RealTimeStylus solo recibe estos datos si el objeto RealTimeStylus está asociado a la ventana o al control que está directamente debajo del lápiz en el momento del gesto del sistema. |
HoverLeave | El objeto SystemGestureData para el gesto del sistema HoverEnter y varios objetos InAirPacketsData de velocidad media suficiente. |
Nota: Puede haber un retraso notable antes de recibir el gesto del sistema HoverLeave . El objeto RealTimeStylus solo recibe estos datos si el objeto RealTimeStylus está asociado a la ventana o al control que está directamente debajo del lápiz en el momento del gesto del sistema. |
Datos de lápiz personalizados
Los datos de lápiz personalizados se pueden agregar al objeto RealTimeStylus llamando al método AddCustomStylusDataToQueue . Los datos de lápiz óptico personalizados se pueden agregar a las colas del objeto RealTimeStylus en uno de los tres lugares.
- Cuando el parámetro queue se establece en Output, los datos personalizados se agregan a la cola de salida del objeto RealTimeStylus después de que la colección de complementos sincrónica procese los datos que está procesando actualmente.
- Cuando el parámetro queue se establece en OutputImmediate, los datos personalizados se agregan a la cola de salida del objeto RealTimeStylus antes de que la colección de complementos sincrónica procese los datos actualmente.
- Cuando el parámetro queue se establece en Input, los datos personalizados se agregan a la cola de entrada del objeto RealTimeStylus y se envían a la colección de complementos sincrónicos antes de los nuevos datos del flujo de datos del lápiz de tableta.
En cada uno de los casos anteriores, los datos agregados por los complementos posteriores en la colección de complementos sincrónicos se agregan después de agregar los datos agregados por los complementos anteriores.
Nota
Si la llamada al método AddCustomStylusDataToQueue se realiza a partir de un complemento sincrónico en respuesta a una llamada a uno de sus métodos IStylusSyncPlugin , los datos de lápiz personalizados se agregan al flujo de datos del lápiz de tableta de forma predecible; de lo contrario, se agrega a la cola en relación con los datos de lápiz actuales que el objeto RealTimeStylus está procesando y no en relación con los datos que el complemento asincrónico está procesando. El método AddCustomStylusDataToQueue produce una excepción si el objeto RealTimeStylus está deshabilitado.
Los datos de lápiz personalizados se agregan a la cola como un objeto CustomStylusData y los complementos reciben estos datos a través de su método Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded o Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded .
Los objetos DynamicRenderer y GestureRecognizer pueden agregar datos de lápiz óptico personalizados a la cola. Para obtener más información sobre los objetos DynamicRenderer y GestureRecognizer , vea Complementos dynamic-renderer y complementos recognizer.
El objeto RealTimeStylus llama al método Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded en el subproceso desde el que recibe la llamada a su método AddCustomStylusDataToQueue .
En el diagrama siguiente se muestra la adición de datos de lápiz óptico personalizados a la cola de salida con el parámetro queue establecido en Output.
En este diagrama, los círculos con letra "A" y "B" representan datos de lápiz de tableta que ya se han agregado a la cola de salida del objeto RealTimeStylus y que aún no se han enviado a la colección de complementos asincrónica. El círculo con letras "C" representa los datos del lápiz de tableta que el objeto RealTimeStylus está procesando actualmente. Se envía a la colección de complementos sincrónica y se coloca en la cola de salida. Los círculos numerados "1", "2" y "3" representan datos de lápiz personalizados que se han agregado a la cola de salida por los complementos sincrónicos primero, segundo y tercero respectivamente en respuesta a los datos del lápiz de tableta representados por "C". Los complementos han agregado los datos de lápiz óptico personalizados con el parámetro queue establecido en StylusQueues. El círculo vacío representa la posición de la cola de salida donde se agregan datos futuros del lápiz de tableta.
En el diagrama siguiente se muestra la adición de datos de lápiz óptico personalizados a la cola de salida con el parámetro queue establecido en OutputImmediate.
En este diagrama, los círculos con letra "A" y "B" representan datos de lápiz de tableta que ya se han agregado a la cola de salida del objeto RealTimeStylus y que aún no se han enviado a la colección de complementos asincrónica. El círculo con letras "C" representa los datos del lápiz de tableta que el objeto RealTimeStylus está procesando actualmente. Se envía a la colección de complementos sincrónica y se coloca en la cola de salida. Los círculos numerados "1", "2" y "3" representan datos de lápiz personalizados que se han agregado a la cola de salida por los complementos sincrónicos primero, segundo y tercero respectivamente en respuesta a los datos del lápiz de tableta representados por "C". Los complementos han agregado los datos de lápiz óptico personalizados con el parámetro queue establecido en OutputImmediate. El círculo vacío representa la posición de la cola de salida donde se agregan datos futuros del lápiz de tableta.
En el diagrama siguiente se muestra la adición de datos de lápiz óptico personalizados a la cola de entrada.
En este diagrama, los círculos con letra "A" y "B" representan datos de lápiz de tableta que ya se han agregado a la cola de salida del objeto RealTimeStylus y que aún no se han enviado a la colección de complementos asincrónica. El círculo con letras "C" representa los datos del lápiz de tableta que el objeto RealTimeStylus está procesando actualmente. Se envía a la colección de complementos sincrónica y se coloca en la cola de salida. Los círculos numerados "1", "2" y "3" representan datos de lápiz óptico personalizados agregados a la cola de entrada por los complementos sincrónicos primero, segundo y tercero respectivamente en respuesta a los datos del lápiz de tableta representados por "C". Los complementos han agregado los datos de lápiz óptico personalizados con el parámetro queue establecido en Input. Los datos de lápiz personalizados numerados "1" se pasan a los complementos sincrónicos y, a continuación, a la cola de salida antes de que se procesen los datos del lápiz óptico personalizado "2" y "3", ambos procesados antes de que se procesen los siguientes datos del lápiz de tableta. El círculo vacío representa la posición de la cola de salida donde se agregan datos futuros del lápiz de tableta.
Datos de error
Cuando un complemento produce una excepción, se interrumpe el flujo normal de datos. El objeto RealTimeStylus genera un objeto ErrorData y llama a:
- El método Microsoft.StylusInput.IStylusSyncPlugin.Error o Microsoft.StylusInput.IStylusAsyncPlugin.Error del complemento que produjo la excepción.
- El método Microsoft.StylusInput.IStylusSyncPlugin.Error o Microsoft.StylusInput.IStylusAsyncPlugin.Error de los complementos restantes de esa colección.
Si el complemento que produjo la excepción es un complemento sincrónico, el objeto ErrorData se agrega a la cola de salida. A continuación, el objeto RealTimeStylus reanuda el procesamiento normal de los datos originales.
En el diagrama siguiente se muestra la adición de datos de error a los datos del lápiz de tableta.
En este diagrama, los círculos con letra "A" y "B" representan datos de lápiz de tableta que ya se han agregado a la cola de salida del objeto RealTimeStylus y que aún no se han enviado a la colección de complementos asincrónica. El círculo con letras "C" representa los datos del lápiz de tableta que el objeto RealTimeStylus está procesando actualmente. El círculo con letra "e" representa un objeto ErrorData generado por el objeto RealTimeStylus cuando el segundo complemento sincrónico, Complemento sincrónico 2, produce una excepción mientras procesa "C". A continuación, el objeto RealTimeStylus detiene su procesamiento de "C" y pasa "e" al complemento que generó la excepción y todos los complementos posteriores. A continuación, el objeto RealTimeStylus coloca "e" en la cola de salida y reanuda el procesamiento de "C", que se pasa a los complementos restantes en la colección de complementos sincrónica y se coloca en la cola de salida después de "e". El círculo vacío representa la posición de la cola de salida donde se agregan datos futuros del lápiz de tableta.
Si un complemento produce una excepción desde su método Error, el objeto RealTimeStylus detecta la excepción, pero no genera un nuevo objeto ErrorData . Esto es para evitar la recursividad.
Los datos de error se agregan a la cola de salida después de los datos de lápiz óptico personalizados que se agregan en la posición OutputImmediate antes de la excepción que creó los datos de error y antes de los datos de lápiz personalizados que se agregan en la posición outputImmediate por los complementos posteriores de la colección de complementos sincrónicos.
En el diagrama siguiente se muestra cómo se agregan los datos de error a la cola de salida en relación con los datos personalizados que se agregan a la cola OutputImmediate .
En este diagrama, los círculos con letra "A" y "B" representan datos de lápiz de tableta que ya se han agregado a la cola de salida del objeto RealTimeStylus y que aún no se han enviado a la colección de complementos asincrónica. El círculo con letras "C" representa los datos del lápiz de tableta que el objeto RealTimeStylus está procesando actualmente. Los círculos numerados "1", "2" y "3" se agregan por los complementos primero, segundo y tercero sincrónico respectivamente a la cola OutputImmediate en respuesta a los datos representados por el círculo "C". El círculo con letra "e" representa los datos de error generados en respuesta a una excepción producida por el segundo complemento después del segundo complemento agregado datos personalizados a la cola de salida en la posición OutputImmediate .
Si algún complemento sincrónico agrega datos de lápiz óptico personalizados a la cola de entrada en respuesta a los datos de error, los datos se agregan inmediatamente antes de los datos de error. Si alguno de los complementos sincrónicos agrega datos de lápiz óptico personalizados a la cola de salida en la posición Salida en respuesta a los datos de error, los datos se agregan inmediatamente después de los datos de error.
El objeto RealTimeStylus llama al método Microsoft.StylusInput.IStylusSyncPlugin.Error en el subproceso desde el que se produce la excepción.
Temas relacionados