Données de plug-in et classe RealTimeStylus
Les plug-ins pour la classe RealTimeStylus doivent implémenter l’interface IStylusSyncPlugin ou IStylusAsyncPlugin , ou les deux. Bien que vous ayez à implémenter toutes les méthodes d’interface de plug-in, votre plug-in reçoit uniquement des appels sur les méthodes signalées dans la propriété Plug-ins Microsoft.StylusInput.IStylusSyncPlugin.DataInterest ou Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest .
Les méthodes définies sur les interfaces utilisent des objets dans l’espace de noms Microsoft.StylusInput.PluginData pour passer les données du stylet aux plug-ins. Le tableau suivant décrit les objets de données qui sont des paramètres dans les méthodes de notification et répertorie la valeur DataInterestMask associée à la notification.
Données de plug-in | DataInterestMask Value | Description |
---|---|---|
CustomStylusData | CustomStylusDataAdded | Données d’application personnalisées ajoutées par un plug-in. |
ErrorData | Error | Informations d’erreur que l’objet RealTimeStylus ajoute en réponse à une exception non gérée dans l’un de ses plug-ins. |
InAirPacketsData | InAirPackets | Informations de paquet pour le mouvement du stylet pendant que le stylet est dans l’air au-dessus du numériseur. |
PacketsData | Paquets | Informations de paquet pour le mouvement du stylet pendant que le stylet touche le numériseur. |
RealTimeStylusDisabledData | RealTimeStylusDisabled | Informations que l’objet RealTimeStylus ajoute lorsqu’il est désactivé. |
RealTimeStylusEnabledData | RealTimeStylusEnabled | Informations que l’objet RealTimeStylus ajoute lorsqu’il est activé. |
StylusButtonDownData | StylusButtonDown | Informations sur le bouton particulier du stylet sur lequel vous appuyez. |
StylusButtonUpData | StylusButtonUp | Informations sur le bouton particulier du stylet qui est libéré. |
StylusDownData | StylusDown | Informations de paquet pour un stylet lorsque le stylet est mis en contact avec le numériseur. |
StylusInRangeData | StylusInRange | Informations sur le stylet particulier qui entre dans la zone d’entrée de l’objet RealTimeStylus ou dans la plage de détection du numériseur au-dessus de la zone d’entrée de l’objet RealTimeStylus . |
StylusOutOfRangeData | StylusOutOfRange | Informations sur le stylet particulier qui quitte la zone d’entrée de l’objet RealTimeStylus ou quitte la plage de détection du numériseur au-dessus de la zone d’entrée de l’objet RealTimeStylus . |
StylusUpData | StylusUp | Informations de paquet pour un stylet lorsque le stylet est extrait du numériseur. |
SystemGestureData | SystemGesture | Informations que l’objet RealTimeStylus ajoute lorsqu’il détecte un mouvement système. |
TabletAddedData | TabletAdded | Informations sur l’objet Tablet en cours d’ajout. |
TabletRemovedData | TabletRemoved | Informations sur l’objet Tablet en cours de suppression. |
Pour plus d’informations sur la façon dont l’objet RealTimeStylus gère le flux de données du stylet de tablette, consultez Utilisation de la classe RealTimeStylus.
Intérêt pour les données
L’objet RealTimeStylus vérifie la propriété Microsoft.StylusInput.IStylusSyncPlugin.DataInterest ou Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest d’un plug-in lorsque le plug-in est ajouté à la collection de plug-ins synchrones ou asynchrones de l’objet RealTimeStylus . Par conséquent, vous devez utiliser la propriété DataInterest pour vous abonner à toutes les notifications que cette instance de votre plug-in utilise, mais pas à l’une des notifications que ce instance de votre plug-in n’utilise jamais. Pour les notifications que votre plug-in utilise uniquement occasionnellement case activée d’abord l’état de votre plug-in dans la méthode de notification et retourner si la notification n’est pas utilisée par votre plug-in dans son état actuel.
Un plug-in reçoit uniquement des appels sur les méthodes signalées dans la propriété Microsoft.StylusInput.IStylusSyncPlugin.DataInterest ou Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest du plug-in. Pour plus d’informations sur les valeurs possibles de la propriété DataInterest d’un plug-in, consultez l’énumération DataInterestMask .
Minutage
Les données sont mises en file d’attente dans l’objet RealTimeStylus avant d’être passées aux plug-ins dans la collection de plug-ins asynchrone. La liste suivante décrit certaines situations que vous devrez peut-être prendre en compte lors de la conception d’un plug-in asynchrone.
- Lorsque l’objet RealTimeStylus est désactivé, le plug-in asynchrone peut recevoir d’autres notifications en file d’attente avant que sa méthode RealTimeStylusDisabled soit appelée. Dans ce cas, les appels du plug-in à certaines méthodes et propriétés de l’objet RealTimeStylus lèvent une exception. Les informations relatives à votre plug-in doivent être mises en cache lorsque l’objet RealTimeStylus est activé.
- La méthode ClearStylusQueues de l’objet RealTimeStylus peut supprimer des informations de la file d’attente de sortie. Par conséquent, les plug-ins asynchrones ne peuvent pas s’appuyer sur la réception de toutes les notifications pertinentes.
- Lorsqu’un objet Tablet disponible pour l’objet RealTimeStylus est supprimé, le plug-in asynchrone peut recevoir une notification de stylet mis en file d’attente pour la tablette avant l’appel de sa méthode TabletRemoved . Dans ce cas, l’appel de la méthode GetTabletPropertyDescriptionCollection de l’objet RealTimeStylus ne fonctionne pas. Les informations relatives à votre plug-in doivent être mises en cache lorsque l’objet RealTimeStylus est activé ou lorsqu’une nouvelle tablette est ajoutée.
Selon votre application, vous pouvez améliorer les performances lors de la désactivation d’un objet RealTimeStylus . Lorsque la propriété Enabled de l’objet RealTimeStylus a la valeur FALSE, les données des files d’attente d’entrée et de sortie sont traitées jusqu’à ce que les files d’attente soient vides. Vous pouvez appeler la méthode ClearStylusQueues de l’objet RealTimeStylus pour effacer les files d’attente avant de désactiver l’objet RealTimeStylus.
Données activées et désactivées
Lorsque l’objet RealTimeStylus est activé, chaque plug-in reçoit un appel à sa méthode Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled ou Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusEnabled . L’objet RealTimeStylusEnabledData passé dans la notification contient une collection des identificateurs de contexte pour les tablettes disponibles au moment où l’objet RealTimeStylus est activé.
Notes
Étant donné que les données de plug-in pour la collection de plug-ins asynchrones de l’objet RealTimeStylus sont mises en file d’attente, les plug-ins asynchrones peuvent recevoir des données avant de recevoir un appel à sa méthode RealTimeStylusDisabled , mais après la désactivation de l’objet RealTimeStylus . Notez que certaines méthodes et propriétés de l’objet RealTimeStylus lèvent une exception si l’objet RealTimeStylus est désactivé.
L’objet RealTimeStylus appelle les méthodes Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled et Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusDisabled sur le thread à partir duquel l’objet RealTimeStylus est activé ou à partir duquel le plug-in synchrone est ajouté.
En règle générale, ajoutez ou supprimez des plug-ins pendant que l’objet RealTimeStylus est désactivé. Pour plus d’informations sur l’ajout et la suppression de plug-ins à l’objet RealTimeStylus , consultez Plug-ins et la classe RealTimeStylus.
Données de tablette
Lorsqu’une tablette que l’objet RealTimeStylus peut utiliser est ajoutée ou supprimée du Tablet PC alors que l’objet RealTimeStylus est activé, l’objet RealTimeStylus avertit ses plug-ins qu’un objet Tablet a été ajouté ou supprimé. Chaque objet RealTimeStylus conserve une liste d’identificateurs uniques pour les objets Tablet avec lesquels il peut interagir. L’objet RealTimeStylus a deux méthodes de traduction entre l’identificateur unique et l’objet Tablet, les méthodes GetTabletContextIdFromTablet et GetTabletFromTabletContextId .
Notes
Les informations sur une tablette ne sont plus disponibles à partir de l’objet RealTimeStylus une fois la tablette supprimée de la tablette PC.
Données du stylet tablette
L’objet RealTimeStylus transmet des informations sur le stylet de la tablette à ses plug-ins dans un certain nombre de méthodes de notification. Les informations sur le stylet de la tablette sont représentées par un objet Stylus . Cet objet est un instantané de l’état du stylet de la tablette au moment où les données ont été collectées. Étant donné que les plug-ins reçoivent les données du stylet de tablette dans le cadre du flux de données du stylet de tablette, les plug-ins doivent utiliser les informations de l’objet Stylus au lieu de vérifier l’état actuel d’un stylet de tablette particulier via la classe Cursor .
Chaque objet Stylus contient l’identificateur de contexte de la tablette qui a généré les données.
Données de mouvement système
L’objet RealTimeStylus reçoit des données sur les mouvements système, car ils sont reconnus par le Tablet PC. Le tableau suivant décrit l’ordre dans lequel les objets SystemGestureData se produisent dans le flux de données du stylet tablette par rapport à d’autres données de stylet de tablette.
SystemGesture | Objets qui précèdent l’objet SystemGestureData | Objets qui viennent après l’objet SystemGestureData |
---|---|---|
Taper | Objet StylusDownData . |
Objet StylusUpData . |
DoubleTap | Objet StylusDownData , objet SystemGestureData pour le mouvement Tap system et les objets StylusUpData . |
Deuxième objet StylusDownData . |
RightTap | Objet StylusDownData et objet SystemGestureData pour le membre HoldEnter de l’énumération SystemGesure . |
Objet StylusUpData . |
Faites glisser | Objet StylusDownData . |
Objet StylusUpData . |
RightDrag | Objet StylusDownData . |
Objet StylusUpData . |
HoldEnter | Objet StylusDownData . |
Objet StylusUpData . Note: Ce mouvement système n’est pas reconnu si l’utilisateur commence un mouvement système Glisser ou RightDrag . |
HoldLeave | Non implémenté. |
Non implémenté. |
HoverEnter | Plusieurs objets InAirPacketsData de faible vitesse moyenne. |
Note: Il peut y avoir un délai notable avant de recevoir le mouvement système HoverEnter . L’objet RealTimeStylus reçoit ces données uniquement si l’objet RealTimeStylus est attaché à la fenêtre ou au contrôle qui se trouve directement sous le stylet au moment du mouvement système. |
HoverLeave | Objet SystemGestureData pour le mouvement système HoverEnter et plusieurs objets InAirPacketsData d’une vitesse moyenne suffisante. |
Note: Il peut y avoir un délai notable avant de recevoir le mouvement système HoverLeave . L’objet RealTimeStylus reçoit ces données uniquement si l’objet RealTimeStylus est attaché à la fenêtre ou au contrôle qui se trouve directement sous le stylet au moment du mouvement système. |
Données de stylet personnalisées
Les données de stylet personnalisées peuvent être ajoutées à l’objet RealTimeStylus en appelant la méthode AddCustomStylusDataToQueue . Les données de stylet personnalisées peuvent être ajoutées aux files d’attente de l’objet RealTimeStylus à l’un des trois emplacements.
- Lorsque le paramètre de file d’attente est défini sur Sortie, les données personnalisées sont ajoutées à la file d’attente de sortie de l’objet RealTimeStylus après les données en cours de traitement par la collection de plug-in synchrone.
- Lorsque le paramètre de file d’attente est défini sur OutputImmediate, les données personnalisées sont ajoutées à la file d’attente de sortie de l’objet RealTimeStylus avant les données en cours de traitement par la collection de plug-ins synchrones.
- Lorsque le paramètre de file d’attente est défini sur Entrée, les données personnalisées sont ajoutées à la file d’attente d’entrée de l’objet RealTimeStylus et sont envoyées à la collection de plug-in synchrone avant de nouvelles données à partir du flux de données du stylet de tablette.
Dans chacun des cas précédents, les données ajoutées par les plug-ins suivants dans la collection de plug-ins synchrones sont ajoutées après les données ajoutées par les plug-ins précédents.
Notes
Si l’appel à la méthode AddCustomStylusDataToQueue est effectué à partir d’un plug-in synchrone en réponse à un appel à l’une de ses méthodes IStylusSyncPlugin , les données de stylet personnalisées sont ajoutées au flux de données du stylet de tablette de manière prévisible ; sinon, il est ajouté à la file d’attente par rapport aux données de stylet actuelles que l’objet RealTimeStylus traite, et non par rapport aux données que le plug-in asynchrone traite. La méthode AddCustomStylusDataToQueue lève une exception si l’objet RealTimeStylus est désactivé.
Les données de stylet personnalisé sont ajoutées à la file d’attente en tant qu’objet CustomStylusData et les plug-ins reçoivent ces données via leur méthode Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded ou Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded .
Les objets DynamicRenderer et GestureRecognizer peuvent ajouter des données de stylet personnalisées à la file d’attente. Pour plus d’informations sur les objets DynamicRenderer et GestureRecognizer , consultez Plug-ins dynamic-Renderer et Plug-ins recognizer.
L’objet RealTimeStylus appelle la méthode Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded sur le thread à partir duquel il reçoit l’appel à sa méthode AddCustomStylusDataToQueue .
Le diagramme suivant illustre l’ajout de données de stylet personnalisé à la file d’attente de sortie avec le paramètre de file d’attente défini sur Output.
Dans ce diagramme, les cercles « A » et « B » représentent les données de stylet de tablette qui ont déjà été ajoutées à la file d’attente de sortie de l’objet RealTimeStylus et qui n’ont pas encore été envoyées à la collection de plug-in asynchrones. Le cercle « C » représente les données du stylet de tablette que l’objet RealTimeStylus traite actuellement. Il est envoyé à la collection de plug-ins synchrones et placé dans la file d’attente de sortie. Les cercles numérotés « 1 », « 2 » et « 3 » représentent les données de stylet personnalisées qui ont été ajoutées à la file d’attente de sortie par les premier, deuxième et troisième plug-ins synchrones respectivement en réponse aux données de stylet de tablette représentées par « C ». Les plug-ins ont ajouté les données de stylet personnalisées avec le paramètre de file d’attente défini sur StylusQueues. Le cercle vide représente la position dans la file d’attente de sortie où les données du stylet tablette sont ajoutées.
Le diagramme suivant illustre l’ajout de données de stylet personnalisé à la file d’attente de sortie avec le paramètre de file d’attente défini sur OutputImmediate.
Dans ce diagramme, les cercles « A » et « B » représentent les données de stylet de tablette qui ont déjà été ajoutées à la file d’attente de sortie de l’objet RealTimeStylus et qui n’ont pas encore été envoyées à la collection de plug-in asynchrones. Le cercle « C » représente les données du stylet de tablette que l’objet RealTimeStylus traite actuellement. Il est envoyé à la collection de plug-ins synchrones et placé dans la file d’attente de sortie. Les cercles numérotés « 1 », « 2 » et « 3 » représentent les données de stylet personnalisées qui ont été ajoutées à la file d’attente de sortie par les premier, deuxième et troisième plug-ins synchrones respectivement en réponse aux données de stylet de tablette représentées par « C ». Les plug-ins ont ajouté les données de stylet personnalisées avec le paramètre de file d’attente défini sur OutputImmediate. Le cercle vide représente la position dans la file d’attente de sortie où les données du stylet tablette sont ajoutées.
Le diagramme suivant illustre l’ajout de données de stylet personnalisé à la file d’attente d’entrée.
Dans ce diagramme, les cercles « A » et « B » représentent les données de stylet de tablette qui ont déjà été ajoutées à la file d’attente de sortie de l’objet RealTimeStylus et qui n’ont pas encore été envoyées à la collection de plug-in asynchrones. Le cercle « C » représente les données du stylet de tablette que l’objet RealTimeStylus traite actuellement. Il est envoyé à la collection de plug-ins synchrones et placé dans la file d’attente de sortie. Les cercles numérotés « 1 », « 2 » et « 3 » représentent les données de stylet personnalisées ajoutées à la file d’attente d’entrée par les premier, deuxième et troisième plug-ins synchrones, respectivement, en réponse aux données de stylet de tablette représentées par « C ». Les plug-ins ont ajouté les données de stylet personnalisées avec le paramètre de file d’attente défini sur Input. Les données de stylet personnalisées numérotées « 1 » sont ensuite transmises aux plug-ins synchrones, puis à la file d’attente de sortie avant les données de stylet personnalisées numérotées « 2 » et « 3 », qui sont traitées avant le traitement des données du stylet de tablette suivante. Le cercle vide représente la position dans la file d’attente de sortie où les données du stylet tablette sont ajoutées.
Données d’erreur
Lorsqu’un plug-in lève une exception, le flux normal de données est interrompu. L’objet RealTimeStylus génère un objet ErrorData et appelle :
- Méthode Microsoft.StylusInput.IStylusSyncPlugin.Error ou Microsoft.StylusInput.IStylusAsyncPlugin.Error du plug-in qui a levé l’exception.
- Méthode Microsoft.StylusInput.IStylusSyncPlugin.Error ou Microsoft.StylusInput.IStylusAsyncPlugin.Error des plug-ins restants de cette collection.
Si le plug-in qui a levé l’exception est un plug-in synchrone, l’objet ErrorData est ajouté à la file d’attente de sortie. Ensuite, l’objet RealTimeStylus reprend le traitement normal des données d’origine.
Le diagramme suivant illustre l’ajout de données d’erreur aux données du stylet de tablette.
Dans ce diagramme, les cercles « A » et « B » représentent les données de stylet de tablette qui ont déjà été ajoutées à la file d’attente de sortie de l’objet RealTimeStylus et qui n’ont pas encore été envoyées à la collection de plug-in asynchrones. Le cercle « C » représente les données du stylet de tablette que l’objet RealTimeStylus traite actuellement. Le cercle « e » représente un objet ErrorData généré par l’objet RealTimeStylus lorsque le deuxième plug-in synchrone, Synchronous Plug-in 2, lève une exception pendant qu’il traite « C ». L’objet RealTimeStylus interrompt ensuite son traitement de « C » et passe « e » au plug-in qui a généré l’exception et tous les plug-ins suivants. L’objet RealTimeStylus place ensuite « e » sur la file d’attente de sortie et reprend son traitement de « C », qui est passé aux plug-ins restants dans la collection de plug-ins synchrones et placé dans la file d’attente de sortie après « e ». Le cercle vide représente la position dans la file d’attente de sortie où les données du stylet tablette sont ajoutées.
Si un plug-in lève une exception de sa méthode Error, l’objet RealTimeStylus intercepte l’exception, mais ne génère pas de nouvel objet ErrorData . Il s’agit d’empêcher la récursivité.
Les données d’erreur sont ajoutées à la file d’attente de sortie après les données de stylet personnalisées ajoutées à la position OutputImmediate avant l’exception qui a créé les données d’erreur et avant toutes les données de stylet personnalisées ajoutées à la position OutputImmediate par les plug-ins suivants dans la collection de plug-ins synchrones.
Le diagramme suivant montre comment les données d’erreur sont ajoutées à la file d’attente de sortie par rapport aux données personnalisées ajoutées à la file d’attente OutputImmediate .
Dans ce diagramme, les cercles « A » et « B » représentent les données de stylet de tablette qui ont déjà été ajoutées à la file d’attente de sortie de l’objet RealTimeStylus et qui n’ont pas encore été envoyées à la collection de plug-in asynchrones. Le cercle « C » représente les données du stylet de tablette que l’objet RealTimeStylus traite actuellement. Les cercles numérotés « 1 », « 2 » et « 3 » sont ajoutés par les premier, deuxième et troisième plug-ins synchrones respectivement à la file d’attente OutputImmediate en réponse aux données représentées par le cercle en lettre « C ». Le cercle « e » représente les données d’erreur générées en réponse à une exception levée par le deuxième plug-in après que le deuxième plug-in a ajouté des données personnalisées à la file d’attente de sortie à la position OutputImmediate .
Si un plug-in synchrone ajoute des données de stylet personnalisées à la file d’attente d’entrée en réponse aux données d’erreur, les données sont ajoutées immédiatement avant les données d’erreur. Si l’un des plug-ins synchrones ajoute des données de stylet personnalisées à la file d’attente de sortie à la position Sortie en réponse aux données d’erreur, les données sont ajoutées immédiatement après les données d’erreur.
L’objet RealTimeStylus appelle la méthode Microsoft.StylusInput.IStylusSyncPlugin.Error sur le thread à partir duquel l’exception est levée.
Rubriques connexes