Beispiel für erweiterte Erkennung
Das Beispiel für erweiterte Erkennung veranschaulicht die erweiterten Features der Microsoft Tablet PC Automation-API( Application Programming Interface, API), die für die Handschrifterkennung verwendet wird.
Es umfasst die folgenden Features:
- Auflisten der installierten Erkennung
- Erstellen eines Erkennungskontexts mit einer bestimmten Sprache
- Verwenden des Erkennungsobjekts
- Festlegen von Erkennungs-Fakten und Wortlisten
- Verwenden von Leitfäden zur Verbesserung der Erkennungsqualität
- Dynamische Hintergrunderkennung
- Gestenerkennung
Die verwendeten Schnittstellen sind : IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokes und IInkStroke.
Freihand- und Projektheader
Fügen Sie zunächst die Header für Tablet PC Automation-Schnittstellen ein. Diese werden mit dem Tablet PC Platform SDK installiert. Die Datei TpcError.h enthält die Fehlercodedefinitionen der Tablet PC-API.
#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>
Die Datei EventSinks.h definiert die Schnittstellen IInkEventsImpl und IInkRecognitionEventsImpl und richtet die RecognitionWithAlternates-, Stroke- und Gestenereignisse ein.
#include "EventSinks.h"
Die Datei ChildWnds.h enthält die Definitionen der Klassen CInkInputWnd und CRecoOutputWnd, die vom CWindowImpl der ATL abgeleitet und zum Erstellen der untergeordneten Fenster des Beispiels verwendet werden.
#include "ChildWnds.h"
Die Datei AdvReco.h deklariert die CAdvRecoApp-Klasse , die die Anwendungsfensterklasse für dieses Beispiel ist.
#include "AdvReco.h"
Initialisieren des Anwendungsfensters
Die -Methode des Fensters Run
richtet das CAdvRecoApp-Objekt ein, lädt das Menü und das Symbol für das Fenster, erstellt ein InkRecognizerContext-Objekt für die Standarderkennung und startet die Nachrichtenschleife des Fensters.
Die OnCreate-Methode des Fensters verarbeitet das WM_CREATE-Ereignis und erstellt die untergeordneten Fenster. Ein InkCollector-Objekt stellt eine Verbindung mit der Ereignisquelle des Freihandsammlers her und aktiviert freihandeingaben im Eingabefenster. Anschließend wird ein InkRecognizerGuide-Objekt erstellt und die Renderer-Eigenschaft des Freihandsammlers verwendet, um die Rechtecke des Erkennungsleitfelds in Freihandraum zu konvertieren. Schließlich erstellt die OnCreate-Methode ein InkWordList-Objekt .
Behandeln von Freihandsammlerereignissen
Die OnStroke-Methode des Fensters verarbeitet das Stroke-Ereignis des Freihandsammlers. Das neue IInkStrokeDisp-Objekt wird den InkStrokes der Freihandsammlereigenschaft hinzugefügt.
Die OnGesture-Methode des Fensters verarbeitet das Gestikereignis des Freihandsammlers. Die OnGesture-Methode identifiziert die Geste, wobei zuerst die Geste mit der höchsten Zuverlässigkeit verwendet wird, und überprüft, ob das Fenster diese bestimmte Geste unterstützt. Wenn die Geste unterstützt wird, wird das Begrenzungsfeld der Geste ungültig, da die Geste aus der Strichsammlung entfernt wird. Wenn die Geste nicht unterstützt wird, wird das Gestenereignis abgebrochen, wodurch der Freihandsammler ein Stroke-Ereignis auslöst. Schließlich wird das Ergebnisfenster aktualisiert.
Behandeln von Kontextereignissen der Erkennung
Die OnRecognitionWithAlternates-Methode des Fensters verarbeitet das RecognitionWithAlternates-Ereignis des Erkennungskontexts. Die OnRecognitionWithAlternates-Methode zeigt die Erkennungsergebnisse im Ergebnisfenster an.
Behandeln von Menübefehlen
Die OnRecognizer-Methode des Fensters verarbeitet die Befehle im Menü Erkennung. Wenn der Standardbefehl ausgewählt wurde, wird die GetDefaultRecognizer-Methode der InkRecognizers verwendet, um die Standarderkennung abzurufen. andernfalls wird die ausgewählte Erkennung abgerufen. Anschließend wird ein Erkennungskontext erstellt und verwendet, und menü und status Leiste werden aktualisiert.
Die OnFactoidWordlist-Methode des Fensters verarbeitet den Befehl Wordlist verwenden im Menü Factoid . Die Strokes-Eigenschaft des Erkennungskontexts ist auf NULL festgelegt, um den Erkennungskontext zurückzusetzen. Wenn die Option Wordlist verwenden deaktiviert ist, wird die WordList-Eigenschaft des Erkennungskontexts auf NULL festgelegt. Andernfalls wird die WordList-Eigenschaft des Erkennungskontexts auf die InkWordList festgelegt, die in der OnCreate-Methode erstellt wurde. Schließlich wird die InkStrokes des Freihandsammlers wieder an den Erkennungskontext angefügt, die BackgroundRecognizeWithAlternates-Methode des Erkennungskontexts aufgerufen, und das Menü wird aktualisiert.
Die OnFactoid-Methode des Fensters verarbeitet die factoid-Befehle im Menü Factoid . Sie legt zunächst die Strokes-Eigenschaft des Erkennungskontexts auf NULL fest, legt die Factoid-Eigenschaft des Erkennungskontexts auf das ausgewählte Factoid fest und weist den InkStrokes des Freihandsammlers dem Erkennungskontext neu zu. Wenn das Factoid-Objekt vom Erkennungskontext unterstützt wird, wird die BackgroundRecognizeWithAlternates-Methode des Erkennungskontexts aufgerufen. andernfalls wird eine Fehlermeldung angezeigt. Schließlich werden das Menü und die status leiste aktualisiert.
Die OnGuide-Methode des Fensters verarbeitet die Befehle im Menü "Leitfaden" . Wenn der Erkennungskontext die Führungsoptionen unterstützt, legt die OnGuide-Methode die Strokes-Eigenschaft des Erkennungskontexts auf NULL fest, legt die Guide-Eigenschaft des Erkennungskontexts auf die ausgewählte Führungseinstellung fest, weist die InkStrokes des Freihandsammlers erneut dem Erkennungskontext zu und ruft die BackgroundRecognizeWithAlternates-Methode des Erkennungskontexts auf. Andernfalls wird eine Fehlermeldung angezeigt. Schließlich werden das Eingabefenster, das Menü und status Leiste aktualisiert.
Die OnMode-Methode des Fensters verarbeitet die Befehle im Menü Modus . Es deaktiviert den Freihandsammler, aktualisiert die CollectionMode-Eigenschaft des Freihandsammlers, aktualisiert das Menü und zeigt die Gestenlisten an oder blendet sie aus. Schließlich ist der Freihandsammler aktiviert.
Die OnRecognize-Methode des Fensters verarbeitet den Befehl Erkennen im Menü Freihand. Es ruft die EndInkInput-Methode des Erkennungskontexts auf, um zu bewahren, dass Freihand dem Erkennungskontext hinzugefügt wird. Dies ist manchmal notwendig, da nicht alle Erkennungser eine teilweise Erkennung unterstützen. Anschließend wird die Recognize-Methode des Erkennungskontexts aufgerufen und die Ergebnisse an die OnRecognitionWithAlternates-Methode des Fensters übergeben. Schließlich werden die InkStrokes des Freihandsammlers dem Erkennungskontext neu zugewiesen.
Die OnClear-Methode des Fensters verarbeitet den Befehl Clear im Freihandmenü . Es löscht die Striche aus der Freihandeigenschaft des Freihandsammlers, gibt die alte Strichauflistung frei und erstellt eine neue für die Freihandeigenschaft des Freihandsammlers und fügt die neue Strichauflistung an den Erkennungskontext an.
Die OnExit-Methode des Fensters verarbeitet den Befehl Exit im Freihandmenü und löst das WM_CLOSE-Ereignis aus.
Hilfsmethoden
Die LoadMenu-Methode des Fensters wird von der Run-Methode des Fensters aufgerufen und fügt dem Menü die Liste der unterstützten Erkennungen und die Liste der unterstützten Factoids hinzu. Zunächst werden die InkRecognizer abgerufen. Anschließend durchlaufen sie die verfügbaren Erkennungen und wählt nur diejenigen aus, die über eine Liste von Sprachen in der Languages-Eigenschaft verfügen, die dem Menü "Erkennung" hinzugefügt werden. Schließlich füllt es das Factoid-Menü mit der Liste der Als globale Konstante definierten Factoids auf.
Die UseRecognizer-Methode des Fensters wird von der OnRecognizer-Methode des Fensters aufgerufen, wenn der Benutzer eine neue Erkennung auswählt. Es erstellt einen Erkennungskontext, trennt den alten Kontext von der Erkennungsereignissenke, löscht und gibt den alten Kontext frei und fügt den neuen Kontext an die Erkennungsereignissenke an.
Anschließend überprüft die UseRecognizer-Methode die Capabilities-Eigenschaft der Erkennung, die einen InkRecognizerCapabilities-Wert zurückgibt. Wenn die Erkennung zeilenweise Eingaben unterstützt, ist der Befehl Zeilen im Menü "Leitfaden " aktiviert. Wenn die Erkennung boxed input unterstützt, ist der Befehl Boxen aktiviert. Wenn die Erkennung keine freie Eingabe unterstützt, ist der Befehl None deaktiviert. Wenn die aktuelle Leitfadenauswahl nicht unterstützt wird, werden sowohl die Guide-Eigenschaft des Erkennungskontexts als auch das Menü aktualisiert.
Anschließend versucht die UseRecognizer-Methode , die WordList- und Factoid-Eigenschaften des Erkennungskontexts festzulegen. Wenn beide Einstellungen von der Erkennung nicht unterstützt werden, wird der Standardwert verwendet, und das Menü wird aktualisiert.
Schließlich fügt die UseRecognizer-Methode die Strokes-Eigenschaft des InkDisp-Objekts des Freihandsammlers an den Erkennungskontext an, ändert die Schriftart des Ausgabefensters in eine Schriftart, die von der Sprache der Erkennung unterstützt wird, setzt das Ausgabefenster zurück und aktualisiert die Erkennungsergebnisse, indem die BackgroundRecognizeWithAlternates-Methode des Erkennungskontexts aufgerufen wird.
Die GetGestureName-Methode des Fensters wird von der OnGesture-Methode des Fensters aufgerufen. Sie sucht nach der Geste und gibt einen Index zum Namen der Geste zurück, der in einer Zeichenfolgentabelle in der Datei AdvReco.rc gespeichert ist.