Architektur der StylusInput-APIs

Mit den StylusInput-APIs können Sie mit dem Datenstrom des Tablet-Stifts interagieren. Um mit dem Datenstrom zu interagieren, fügen Sie ihrer Anwendung ein RealTimeStylus-Objekt hinzu, und fügen Sie dem RealTimeStylus-Objekt Plug-Ins 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, während sie gezeichnet wird. Das GestureRecognizer-Objekt implementiert die Schnittstellen IStylusSyncPlugin und IStylusAsyncPlugin . 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 Benutzeroberflächenthread der Anwendung aufgerufen.

Synchrone Plug-In-Sammlung

Eine StylusSyncPluginCollection-Auflistung , bei der es sich um eine geordnete Auflistung von IStylusSyncPlugin-Objekten handelt. 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 , bei der es sich um eine geordnete Auflistung von IStylusAsyncPlugin-Objekten handelt. 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-Sammlung hinzugefügt werden.

Synchrone und asynchrone Plug-Ins

Das RealTimeStylus-Objekt ist für den Echtzeitzugriff auf den Datenstrom von einem Tablet-Stift aus konzipiert. Erstellen oder verwenden Sie synchrone Plug-Ins für Aufgaben, die Echtzeitzugriff auf den Datenstrom erfordern und rechnerisch anspruchslos sind, 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 sind möglicherweise rechenintensiv, erfordern aber echtzeitbasierten Zugriff auf den Datenstrom, z. B. die Erkennung mehrerer Gesten. Um diese Anforderungen zu erfüllen, stellen die StylusInput-APIs ein kaskadiertes 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 kaskadierte RealTimeStylus-Modell.

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 enthalten, die Eingabewarteschlange und die Ausgabewarteschlange. Die Stiftdaten werden in Instanzen der Klassen im Microsoft.StylusInput.PluginData-Namespace konvertiert. In der folgenden Liste wird beschrieben, wie das RealTimeStylus-Objekt die Daten des Tablet-Stifts verarbeitet:

Das RealTimeStylus-Objekt sucht zuerst in seiner 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 der Eingabe- oder Ausgabewarteschlange Daten hinzufügen.

Nachdem das Plug-In-Datenobjekt an alle Member 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 seiner Ausgabewarteschlange an die Objekte in seiner asynchronen Plug-In-Auflistung. Jedes asynchrone Plug-In kann der Eingabe- oder Ausgabewarteschlange Daten 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 vom RealTimeStylus-Objekt verarbeitet werden, und nicht in Bezug auf die Daten, die das asynchrone Plug-In verarbeitet.

Das folgende Diagramm veranschaulicht den Fluss von Tablet-Stiftdaten durch das RealTimeStylus-Objekt und seine Plug-In-Auflistungen.

Fluss von Tablet-Stiftdaten durch das Realtimestylus-Objekt und seine Plug-In-Auflistungen

In diesem Diagramm stellen die Kreise mit den Bezeichnungen "A" und "B" 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 Kreis mit der Bezeichnung "C" stellt die Tablet-Stiftdaten 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 der Warteschlange bestimmte Daten hinzugefügt und verarbeitet werden, finden Sie unter Plug-In-Daten und die RealTimeStylus-Klasse.

Die StylusInput-APIs

Die StylusInput-APIs befinden sich hauptsächlich in den Namespaces Microsoft.StylusInput und Microsoft.StylusInput.PluginData . 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 .

DynamicRenderer

GestureRecognizer

Realtimestylus

Istylusasyncplugin

Istylussyncplugin

Arbeiten mit den StylusInput-APIs

Das kaskadierte RealTimeStylus-Modell