Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa applicazione illustra come creare una semplice applicazione di riconoscimento della grafia.
Questo programma crea un oggettoInkCollectorper input penna. Abilitare la finestra e un contesto di riconoscimento predefinito oggetto. Dopo aver ricevuto il comando "Recognize!", attivato dal menu dell'applicazione, i tratti di inchiostro raccolti vengono passati al contesto di riconoscimento. La stringa di risultato migliore viene presentata in una finestra di messaggio.
Creazione dell'oggetto RecognizerContext
Nella procedura WndProc per l'applicazione, quando il messaggio di WM_CREATE viene ricevuto all'avvio, viene creato un nuovo contesto di riconoscimento che usa il riconoscitore predefinito. Questo contesto viene usato per tutto il riconoscimento nell'applicazione.
case WM_CREATE:
{
HRESULT hr;
hr = CoCreateInstance(CLSID_InkRecognizerContext,
NULL, CLSCTX_INPROC_SERVER, IID_IInkRecognizerContext,
(void **) &g_pIInkRecoContext);
if (FAILED(hr))
{
::MessageBox(NULL, TEXT("There are no handwriting recognizers installed.\n"
"You need to have at least one in order to run this sample.\nExiting."),
gc_szAppName, MB_ICONERROR);
return -1;
}
//...
Riconoscere l'ictus
Il comando recognize viene ricevuto quando l'utente fa clic su Recognize! voce di menu. Il codice ottiene un puntatore all'oggetto ink InkStrokes (pIInkStrokes) dall'oggettoInkDispe quindi passa il InkStrokes al contesto del riconoscimento usando una chiamata a putref_Strokes.
case WM_COMMAND:
//...
else if (wParam == ID_RECOGNIZE)
{
// change cursor to the system's Hourglass
HCURSOR hCursor = ::SetCursor(::LoadCursor(NULL, IDC_WAIT));
// Get a pointer to the ink stroke collection
// This collection is a snapshot of the entire ink object
IInkStrokes* pIInkStrokes = NULL;
HRESULT hr = g_pIInkDisp->get_Strokes(&pIInkStrokes);
if (SUCCEEDED(hr))
{
// Pass the stroke collection to the recognizer context
hr = g_pIInkRecoContext->putref_Strokes(pIInkStrokes);
if (SUCCEEDED(hr))
{
Il codice chiama quindi il metodo Recognize dell'oggetto InkRecognizerContext, passando un puntatore a un oggetto IInkRecognitionResult per contenere i risultati.
// Recognize
IInkRecognitionResult* pIInkRecoResult = NULL;
hr = g_pIInkRecoContext->Recognize(&pIInkRecoResult);
if (SUCCEEDED(hr))
{
Infine, il codice usa la proprietà IInkRecognitionResult oggetto TopString recuperare il risultato del riconoscimento principale in una variabile stringa, rilascia il oggetto IInkRecognitionResult e visualizza la stringa in una finestra di messaggio.
// Get the best result of the recognition
BSTR bstrBestResult = NULL;
hr = pIInkRecoResult->get_TopString(&bstrBestResult);
pIInkRecoResult->Release();
pIInkRecoResult = NULL;
// Show the result string
if (SUCCEEDED(hr) && bstrBestResult)
{
MessageBoxW(hwnd, bstrBestResult,
L"Recognition Results", MB_OK);
SysFreeString(bstrBestResult);
} }
Assicurarsi di reimpostare il contesto di riconoscimento tra gli utilizzi.
// Reset the recognizer context
g_pIInkRecoContext->putref_Strokes(NULL);
}
pIInkStrokes->Release();
}
// restore the cursor
::SetCursor(hCursor);
}