Compartir a través de


Trabajar con la clase RealTimeStylus

La clase RealTimeStylus forma parte de las interfaces de programación de aplicaciones (API) stylusInput. En las secciones siguientes se describen los elementos clave de la clase RealTimeStylus y las API stylusInput.

Creación de instancias de la clase RealTimeStylus

Al crear un objeto RealTimeStylus , tiene la opción de adjuntarlo a un identificador de ventana o a un control. La asociación del objeto RealTimeStylus a un identificador de ventana requiere permisos adicionales. Para obtener más información sobre estos permisos, consulte Consideraciones de confianza parcial para las API de StylusInput.

Nota

No se puede adjuntar el objeto RealTimeStylus a una ventana o control en un proceso diferente.

 

Si usa el constructor predeterminado, se crea un objeto RealTimeStylus que solo puede aceptar la entrada de otro objeto RealTimeStylus . Para obtener más información sobre cómo conectar dos objetos RealTimeStylus , vea El modelo Cascaded RealTimeStylus.

El objeto RealTimeStylus implementa la interfaz IDisposable .

Extensión de la clase RealTimeStylus

Para permitir que los complementos interactúen con el flujo de datos desde el lápiz de la tableta, el objeto RealTimeStylus mantiene dos colecciones de complementos, a las que pueden acceder los métodos GetStylusSyncPlugin y GetStylusAsyncPlugin en C++ y las propiedades SyncPluginCollection y AsyncPluginCollection en código administrado. Puede agregar un complemento llamando al método AddStylusSyncPlugin o AddStylusAsyncPlugin de la colección dentro de la propiedad adecuada. Para obtener más información sobre cómo crear y usar complementos, vea Plug-ins y la clase RealTimeStylus. Para obtener información sobre cómo decidir si crear un complemento sincrónico o asincrónico para una tarea determinada, consulte Consideraciones de subprocesos para las API stylusInput y consideraciones de rendimiento para las API de StylusInput.

Los complementos sincrónicos deben implementar la interfaz IStylusSyncPlugin y los complementos asincrónicos deben implementar la interfaz IStylusAsyncPlugin . Cada complemento tiene una propiedad IStylusSyncPlugin.DataInterest o IStylusAsyncPlugin.DataInterest . El objeto RealTimeStylus solo llama a los métodos de notificación del complemento para los métodos en los que se ha suscrito el complemento. Para obtener más información sobre los métodos de notificación, vea Datos de complemento y la clase RealTimeStylus.

El objeto RealTimeStylus implementa la interfaz IStylusAsyncPlugin . La única manera de crear instancias de un objeto RealTimeStylus que acepta la entrada de otro objeto RealTimeStylus es usar el constructor predeterminado e implementar el modelo realTimeStylus en cascada. Para obtener más información sobre cómo conectar dos objetos RealTimeStylus , vea El modelo Cascaded RealTimeStylus.

El objeto RealTimeStylus tiene dos colas internas que llevan los datos del lápiz de tableta, la cola de entrada y la cola de salida. Los datos del lápiz se convierten en instancias de las clases del espacio de nombres Microsoft.StylusInput.PluginData . En la lista siguiente se describe cómo el objeto RealTimeStylus controla los datos del lápiz de tableta.

  1. El objeto RealTimeStylus comprueba primero los objetos de datos del complemento en su cola de entrada y, a continuación, desde el flujo de datos del lápiz de tableta.
  2. El objeto RealTimeStylus envía un objeto de datos de complemento a los objetos de su colección de complementos sincrónica. Cada complemento sincrónico puede agregar datos a la cola de entrada o salida.
  3. Una vez que el objeto de datos del complemento se ha enviado a todos los miembros de la colección de complementos sincrónicos, el objeto de datos del complemento se coloca en la cola de salida del objeto RealTimeStylus .
  4. A continuación, el objeto RealTimeStylus comprueba si se va a procesar el siguiente objeto de datos del complemento.
  5. Aunque la cola de salida del objeto RealTimeStylus contiene datos, el objeto RealTimeStylus envía un objeto de datos de complemento desde su cola de salida a los objetos de su colección de complementos asincrónica. Cada complemento asincrónico puede agregar datos a la cola de entrada o salida, pero dado que los complementos asincrónicos se ejecutan en el subproceso de la interfaz de usuario (UI), los datos se agregan a la cola en relación con los datos del lápiz actuales que el objeto RealTimeStylus está procesando y no en relación con los datos que el complemento asincrónico está procesando.

En el diagrama siguiente se muestra el flujo de datos del lápiz de tableta a través del objeto RealTimeStylus y sus colecciones de complementos.

ilustración en el que se muestra el flujo de datos del lápiz de pc 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. Se envía a la colección de complementos sincrónica y se coloca en la cola de salida. El círculo vacío representa la posición de la cola de salida donde se agregan datos futuros del lápiz de tableta.

Para obtener más información sobre cómo se agregan datos específicos a la cola y se procesan, vea Datos de complemento y la clase RealTimeStylus.

A continuación se muestra un escenario mínimo para usar el objeto RealTimeStylus en un formulario que recopila la entrada de lápiz.

  1. Cree un formulario que implemente la interfaz IStylusAsyncPlugin .
  2. Cree un objeto RealTimeStylus adjunto a un control del formulario.
  3. Establezca interés en las notificaciones StylusDown, Packets y StylusUp en la propiedad IStylusAsyncPlugin.DataInterest del formulario.
  4. En los métodos StylusDown, Packets y StylusUp del formulario, agregue código para controlar las notificaciones stylus down, packets y stylus up que se envían desde el objeto RealTimeStylus del formulario.

Para obtener un ejemplo de esta aplicación, consulte el Ejemplo de colección de lápiz RealTimeStylus.

Trabajar con objetos tablet

Cada objeto RealTimeStylus habilitado mantiene una lista de identificadores únicos para los objetos Tablet con los que puede interactuar. El objeto RealTimeStylus expone dos métodos para traducir entre el identificador único y el objeto Tablet : los métodos GetTabletContextIdFromTablet y GetTabletFromTabletContextId .

El objeto TabletPropertyDescription (en código administrado) contiene una propiedad PacketPropertyId y una estructura TabletPropertyMetrics que describe el intervalo, la resolución y las unidades de la propiedad para un objeto Tablet específico. El método GetDesiredPacketDescription del objeto RealTimeStylus devuelve una matriz de identificadores únicos globales (GUID) para las propiedades de paquete que el objeto RealTimeStylus reenvía a sus complementos cuando esas propiedades de paquete están disponibles. Para modificar el conjunto de propiedades de paquete, el objeto RealTimeStylus pasa a sus complementos, llame al método SetDesiredPacketDescription del objeto RealTimeStylus. El método GetTabletPropertyDescriptionCollection (en código administrado) del objeto RealTimeStylus toma un identificador de tableta único y devuelve una colección de objetos TabletPropertyDescription . Estas propiedades de paquete representan el subconjunto de propiedades admitidas por la tableta devuelta por el método GetDesiredPacketDescription .

Para obtener una lista de los GUID de propiedad de paquete estándar, consulte la clase PacketPropertyGuids Constants .

Consideraciones especiales

En la lista siguiente se describen otros puntos que se deben tener en cuenta al usar el objeto RealTimeStylus con un objeto Tablet .

  • El método SetDesiredPacketDescription solo se puede llamar mientras el objeto Tablet está deshabilitado. El objeto RealTimeStylus puede modificar la lista de propiedades de paquete deseadas; Por lo tanto, llame al método GetDesiredPacketDescription después de la llamada al método SetDesiredPacketDescription para determinar qué propiedades de paquete puede reenviar el objeto RealTimeStylus a sus complementos. Solo se garantiza que una tableta admita los valores X, Y y PacketStatus para PacketProperty. Por lo tanto, es posible que el diseño del complemento deba tener en cuenta la recepción de menos propiedades de paquete de las deseadas.
  • El método GetTabletPropertyDescriptionCollection (para código administrado) solo se puede llamar mientras el objeto RealTimeStylus está habilitado. Dado que la notificación se puede enviar a los complementos asincrónicos después de deshabilitar el objeto RealTimeStylus , es posible que tenga que almacenar en caché la información de cada objeto Tablet . El método GetTabletPropertyDescriptionCollection devuelve una lista de las propiedades de paquete deseadas compatibles con la tableta especificada.
  • Cuando el objeto RealTimeStylus está habilitado, cada complemento recibe una llamada a su método 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 .
  • 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 . Para obtener más información, vea Datos de complemento y la clase RealTimeStylus.

Trabajar con lápices de tableta

El objeto RealTimeStylus pasa información sobre el lápiz de tableta a sus complementos en una serie de métodos de notificación. La información sobre el lápiz de tableta se representa mediante un objeto Stylus , obtenido a través del método GetStyluses . Este objeto es una representación 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 del objeto Stylus en lugar de comprobar el estado actual de un lápiz de tableta determinado a través de la clase Cursor . Para obtener información sobre cómo se pasan los datos del botón de lápiz de tableta y lápiz de tableta a complementos, vea Datos de complementos y la clase RealTimeStylus.

Para obtener una matriz de los objetos Stylus que el objeto RealTimeStylus ha encontrado desde que se ha habilitado por última vez, use el método GetStyluses del objeto RealTimeStyluses.

Microsoft.Ink.Tablet

Microsoft.StylusInput.RealTimeStylus

El modelo Cascaded RealTimeStylus

Consideraciones de confianza parciales para las API stylusInput

Datos de complementos y clase RealTimeStylus

Consideraciones sobre subprocesos para las API de StylusInput