Architektur der StylusInput-APIs
Mit den StylusInput-APIs können Sie mit dem Tablet-Stiftdatenstrom interagieren. Um mit dem Datenstrom zu interagieren, fügen Sie ihrer Anwendung ein RealTimeStylus--Objekt hinzu, und fügen Sie Plug-Ins zum RealTimeStylus-Objekt hinzu.
Zwei Plug-Ins werden in den StylusInput-APIs bereitgestellt. Das DynamicRenderer--Objekt implementiert die IStylusSyncPlugin Schnittstelle. Das DynamicRenderer Objekt rendert die Freihandeingabe in Echtzeit, wie sie gezeichnet wird. Das GestureRecognizer-Objekt implementiert das IStylusSyncPlugin und IStylusAsyncPlugin Schnittstellen. Das GestureRecognizer Objekt erkennt Anwendungsgesten.
Definitionen
Die folgenden Begriffe werden in den Abschnitten verwendet, in denen die StylusInput-APIs beschrieben werden:
Synchrones Plug-In
Eine Klasse, die die IStylusSyncPlugin Schnittstelle implementiert. Synchrone Plug-Ins werden im Allgemeinen direkt vom RealTimeStylus-Objekt aufgerufen.
Asynchrones Plug-In
Eine Klasse, die die IStylusAsyncPlugin Schnittstelle implementiert. Asynchrone Plug-Ins werden im Allgemeinen im Ui-Thread der Anwendung aufgerufen.
Synchrone Plug-In-Sammlung
Eine StylusSyncPluginCollection--Auflistung, die eine sortierte Auflistung von IStylusSyncPlugin-Objekten ist. Eine synchrone Plug-In-Auflistung bezieht sich in der Regel auf die Auflistung, die der SyncPluginCollection-Eigenschaft eines RealTimeStylus--Objekts zugewiesen ist. Nur synchrone Plug-Ins können einer synchronen Plug-In-Sammlung hinzugefügt werden.
Asynchrone Plug-In-Sammlung
Eine StylusAsyncPluginCollection -Auflistung, die eine sortierte Auflistung von IStylusAsyncPlugin-Objekten ist. Eine asynchrone Plug-In-Auflistung bezieht sich in der Regel auf die Auflistung, die der AsyncPluginCollection Eigenschaft eines RealTimeStylus--Objekts zugewiesen ist. Nur asynchrone Plug-Ins können einer asynchronen Plug-In-Auflistung hinzugefügt werden.
Synchrone und asynchrone Plug-Ins
Das RealTimeStylus--Objekt ist so konzipiert, dass der Echtzeitzugriff auf den Datenstrom von einem Tablet-Stift aus erfolgt. Erstellen oder verwenden Sie synchrone Plug-Ins für Aufgaben, die echtzeitbasierten Zugriff auf den Datenstrom erfordern, und sind rechenaufwendig, z. B. für die Paketfilterung. Erstellen oder verwenden Sie asynchrone Plug-Ins für Aufgaben, die keinen Echtzeitzugriff auf den Datenstrom erfordern, z. B. zum Erstellen und Speichern von Strichen in einem InkDisp-Objekt.
Bestimmte Aufgaben können rechenintensiv sein, erfordern jedoch echtzeitbasierten Zugriff auf den Datenstrom, z. B. die Erkennung von Multistrokegesten. Um diese Anforderungen zu erfüllen, stellen die StylusInput-APIs eine kaskadierte RealTimeStylus Modell bereit, mit dem Sie zwei RealTimeStylus--Objekte verwenden können, die jeweils in einem eigenen Thread ausgeführt werden. Weitere Informationen zum kaskadierten RealTimeStylus Modell finden Sie unter Das Cascaded RealTimeStylus Model.
Weitere Informationen zum Verwenden und Erstellen von Plug-Ins finden Sie unter Arbeiten mit den StylusInput-APIs.
Datenstrom des Tablet-Stifts
Das RealTimeStylus-Objekt verfügt über zwei interne Warteschlangen, die die Tablet-Stiftdaten, die Eingabewarteschlange und die Ausgabewarteschlange tragen. Die Stiftdaten werden in Instanzen der Klassen im Microsoft.StylusInput.PluginData Namespace konvertiert. In der folgenden Liste wird beschrieben, wie das RealTimeStylus Objekt die Tablet-Stiftdaten verarbeitet:
Das RealTimeStylus Objekt sucht zuerst in der Eingabewarteschlange und dann aus dem Tablet-Stiftdatenstrom nach Plug-In-Datenobjekten.
Das RealTimeStylus--Objekt sendet ein Plug-In-Datenobjekt an die Objekte in der synchronen Plug-In-Auflistung. Jedes synchrone Plug-In kann Daten entweder zur Eingabe- oder Ausgabewarteschlange hinzufügen.
Nachdem das Plug-In-Datenobjekt an alle Elemente der synchronen Plug-In-Auflistung gesendet wurde, wird das Plug-In-Datenobjekt in der Ausgabewarteschlange des RealTimeStylus Objekts platziert.
Das RealTimeStylus--Objekt sucht dann nach dem nächsten zu verarbeitenden Plug-In-Datenobjekt.
Während die ausgabewarteschlange des RealTimeStylus Objekts Daten enthält, sendet das RealTimeStylus--Objekt ein Plug-In-Datenobjekt aus der Ausgabewarteschlange an die Objekte in der asynchronen Plug-In-Auflistung. Jedes asynchrone Plug-In kann Daten entweder zur Eingabe- oder Ausgabewarteschlange hinzufügen. Da die asynchronen Plug-Ins jedoch im UI-Thread ausgeführt werden, werden die Daten der Warteschlange in Bezug auf die aktuellen Stiftdaten hinzugefügt, die die RealTimeStylus--Objekt verarbeitet, und nicht in Bezug auf die Daten, die das asynchrone Plug-In verarbeitet.
Das folgende Diagramm veranschaulicht den Fluss von Tablet-Stiftdaten über das RealTimeStylus--Objekt und seine Plug-In-Auflistungen.
In diesem Diagramm stellen die Kreise mit der Bezeichnung "A" und "B" Die Tablet-Stiftdaten dar, die bereits der Ausgabewarteschlange des RealTimeStylus Objekts hinzugefügt wurden und noch nicht an die asynchrone Plug-In-Auflistung gesendet wurden. Der kreisbeschriftete "C" stellt die Tabletstiftdaten dar, die das RealTimeStylus--Objekt derzeit verarbeitet. Sie wird an die synchrone Plug-In-Sammlung gesendet und in der Ausgabewarteschlange platziert. Der leere Kreis stellt die Position in der Ausgabewarteschlange dar, an der zukünftige Tablet-Stiftdaten hinzugefügt werden.
Weitere Informationen dazu, wie bestimmte Daten der Warteschlange hinzugefügt und verarbeitet werden, finden Sie unter Plug-In-Daten und der RealTimeStylus-Klasse.
Die StylusInput-APIs
Die StylusInput-APIs befinden sich hauptsächlich in den Microsoft.StylusInput und Microsoft.StylusInput.PluginData Namespaces. Die StylusInput-APIs verweisen jedoch auch auf einige Klassen im Microsoft.Ink Namespace, z. B. die Tablet-Klasse, die TabletPropertyDescriptionCollection-Auflistung und die ApplicationGesture und SystemGesture Enumerationen.
Verwandte Themen