Dela via


Exempel på avancerad igenkänning

Det avancerade igenkänningsexemplet visar avancerade funktioner i Microsoft Tablet PC Automation application programming interface (API) som används för handskriftsigenkänning.

Den innehåller följande funktioner:

  • Räkna upp den installerade identifieraren
  • Skapa en identifierarkontext med ett visst språk
  • Använda identifierarobjektet
  • Ange inställningar för igenkänningsfakta och ordlistor
  • Använda guider för att förbättra igenkänningskvaliteten
  • Dynamisk bakgrundsigenkänning
  • Gestigenkänning

De gränssnitt som används är: IInkRecognizer, IInkRecoContext, IInkRecognitionResult, IInkRecognitionGuide, IInkWordList, IInkGesture, IInkCollector, IInkDisp, IInkRenderer, IInkDrawingAttributes, IInkStrokesoch IInkStroke.

Bläck och projektrubriker

Börja med att inkludera huvudena för Tablet PC-automatiseringsgränssnitt. Dessa installeras med Tablet PC Platform SDK. Filen TpcError.h innehåller definitionerna för Api-felkoden för Tablet PC.

#include <msinkaut.h>
#include <msinkaut_i.c>
#include <TpcError.h>

Filen EventSinks.h definierar gränssnitten IInkEventsImpl och IInkRecognitionEventsImpl och konfigurerar RecognitionWithAlternates, Strokeoch Gesture-händelser.

#include "EventSinks.h"

Filen ChildWnds.h innehåller definitionerna av klasserna CInkInputWnd och CRecoOutputWnd, som härleds från ATL:s CWindowImpl och används för att skapa exemplets underordnade fönster.

#include "ChildWnds.h"

Filen AdvReco.h deklarerar klassen CAdvRecoApp, som är programfönsterklassen för det här exemplet.

#include "AdvReco.h"

Initiera programfönstret

Fönstrets Run-metod konfigurerar CAdvRecoApp- objekt, läser in menyn och ikonen för fönstret, skapar ett InkRecognizerContext- objekt för standardigenkänningen och startar fönstrets meddelandeloop.

Fönstrets OnCreate-metod hanterar WM_CREATE-händelsen och skapar dess underordnade fönster. Ett InkCollector--objekt ansluter sig till ink-insamlarens händelsekälla och aktiverar penninmatning i indatafönstret. Sedan skapas ett InkRecognizerGuide- objekt och med hjälp av inkinsamlingsenhetens egenskap Renderer konverteras rektanglarna i igenkänningsguiden till bläckutrymme. Slutligen skapar metoden OnCreate ett InkWordList- objekt.

Hantering av bläckinsamlarhändelser

Fönstrets OnStroke--metod hanterar bläckinsamlarens Stroke- händelse. Det nya IInkStrokeDisp--objektet läggs till i InkStrokes i inkinsamlarens Ink-egenskap.

Fönstrets OnGesture-metod hanterar bläckinsamlarens Gesture-händelse. Metoden OnGesture identifierar gesten med den högsta konfidensgesten först och kontrollerar om fönstret stöder just den här gesten. Om gesten stöds, ogiltigförklaras gestens avgränsningsruta eftersom gesten tas bort från strecksamlingen. Om gesten inte stöds avbryts händelsen Gesture, vilket gör att bläckuppsamlaren utlöser en Stroke-händelse. Slutligen uppdateras resultatfönstret.

Hantera kontexthändelser för identifierare

Fönstrets OnRecognitionWithAlternates-metoden hanterar identifierarkontextens RecognitionWithAlternates händelse. Metoden OnRecognitionWithAlternates visar igenkänningsresultaten i resultatfönstret.

Hantera menykommandon

Fönstrets OnRecognizer--metod hanterar kommandona på menyn Recognizer. Om kommandot Standard har valts används metoden GetDefaultRecognizer för InkRecognizers för att hämta standardigenkänningen. annars hämtas den valda identifieraren. Sedan skapas och används en identifierarkontext och meny- och statusfältet uppdateras.

Fönstrets OnFactoidWordlist--metod hanterar kommandot Använd Wordlist på menyn Factoid. Identifierarkontextens egenskap Strokes är inställd på NULL- för att återställa igenkänningskontexten. Om alternativet Använd Wordlist är inaktiverat är identifierarkontextens egenskap WordList inställd på NULL-. Annars är identifierarkontextens egenskap WordList inställd på InkWordList- som skapades i metoden OnCreate. Slutligen kopplas InkStrokes- för bläckinsamlaren igen till igenkänningskontexten, igenkänningskontextens BackgroundRecognizeWithAlternates-metod anropas, och menyn uppdateras.

Fönstrets OnFactoid--metod hanterar factoid-kommandona på menyn Factoid. Först ställer den in igenkänningskontextens egenskap Strokes till NULL, ställer in igenkänningskontextens egenskap faktoid till den valda faktoiden och tilldelar om InkStrokes från bläckinsamlaren till igenkänningskontexten. Om objektet Factoid stöds av identifierarkontexten anropas identifierarkontextens BackgroundRecognizeWithAlternates-metoden. annars visas ett felmeddelande. Slutligen uppdateras menyn och statusfältet.

Fönstrets OnGuide--metod hanterar kommandona på menyn Guide. Om igenkänningskontexten stöder guidealternativen sätter metoden OnGuide igenkänningskontextens egenskap Strokes till NULL, sätter igenkänningskontextens egenskap Guide till den valda guideinställningen, omfördelar InkStrokes- av bläckinsamlaren till igenkänningskontexten och anropar igenkänningskontextens BackgroundRecognizeWithAlternates-metoden. Annars visas ett felmeddelande. Slutligen uppdateras indatafönstret, menyn och statusfältet.

Fönstrets OnMode--metod hanterar kommandona på menyn Läge. Den inaktiverar bläckinsamlaren, uppdaterar bläckinsamlarens CollectionMode egenskap, uppdaterar menyn och visar eller döljer gestlistorna. Slutligen har bläckuppsamlaren aktiverats.

Fönstrets OnRecognize-metod hanterar kommandot Recognize på Bläck-menyn. Den anropar identifierarkontextens EndInkInput- metod för att förhindra att pennanteckningar läggs till i identifierarkontexten. Detta är ibland nödvändigt, eftersom inte alla igenkännare stöder partiell igenkänning. Sedan anropas identifierarkontextens metod Recognize och skickar resultatet till fönstrets OnRecognitionWithAlternates-metod. Slutligen tilldelas InkStrokes- av ink-insamlaren om till identifierarkontexten.

Fönstrets OnClear-metod hanterar kommandot Clear på menyn Ink. Den tar bort strecken från bläckinsamlarens egenskap Ink, släpper den gamla strecksamlingen och skapar en ny för bläckinsamlarens egenskap Ink, och kopplar den nya strecksamlingen till igenkännarkontexten.

Fönstrets OnExit--metod hanterar kommandot Avsluta på menyn Ink och genererar händelsen WM_CLOSE.

Hjälpmetoder

Fönstrets LoadMenu--metod anropas från fönstrets Kör-metod och lägger till listan över identifierare som stöds och listan över faktaoider som stöds på menyn. Först hämtar den InkRecognizers. Sedan itererar den genom tillgängliga identifierare och väljer bara de som har en lista över språk i egenskapen Language, som läggs till i Recognizer-menyn. Slutligen fylls menyn Factoid med listan över factoider som definierats som en global konstant.

Fönstrets UseRecognizer-metod anropas från fönstrets OnRecognizer-metod när användaren väljer en ny identifierare. Den skapar en identifierarkontext, kopplar bort den gamla kontexten från identifierarhändelsemottagaren, rensar och släpper den gamla kontexten och kopplar den nya kontexten till identifierarhändelsemottagaren.

Sedan kontrollerar metoden UseRecognizer identifierarens egenskap Capabilities som returnerar ett InkRecognizerCapabilities- värde. Om identifieraren stöder fodrade indata aktiveras kommandot Lines på menyn Guide. Om identifieraren stöder boxade indata är kommandot Boxes aktiverat. Om identifieraren inte stöder kostnadsfria indata inaktiveras kommandot Ingen. Om det aktuella guidevalet inte stöds, uppdateras både egenskapen Guide för igenkänningskontexten och menyn.

Sedan försöker metoden UseRecognizer ange egenskaperna WordList och Factoid för identifierarkontexten. Om någon av inställningarna inte stöds av identifieraren används standardvärdet och menyn uppdateras.

Slutligen kopplar metoden UseRecognizer egenskapen Strokes för ink-insamlarens InkDisp--objekt till igenkännarkontexten. Den ändrar utdatafönstrets teckensnitt till ett som stöds av språket i igenkännaren, återställer utdatafönstret och uppdaterar igenkänningsresultatet genom att anropa igenkännarkontextens BackgroundRecognizeWithAlternates-metod.

Fönstrets metod GetGestureName anropas från fönstrets OnGesture-metod. Den söker efter gesten och returnerar ett index till gestens namn, som lagras i en strängtabell i filen AdvReco.rc.