Sampel Pengenalan Dasar

Aplikasi ini menunjukkan bagaimana Anda dapat membangun aplikasi pengenalan tulisan tangan sederhana.

Program ini membuat objekinkCollectoruntuk tinta -aktifkan jendela dan konteks recognizer default. Setelah menerima perintah "Recognize!" yang dijalankan dari menu aplikasi tersebut, goresan tinta yang dikumpulkan diteruskan ke konteks pengenal. String hasil terbaik disajikan dalam kotak pesan.

Membuat Objek RecognizerContext

Dalam prosedur WndProc untuk aplikasi, ketika pesan WM_CREATE diterima saat startup, konteks pengenal baru yang menggunakan pengenal default dibuat. Konteks ini digunakan untuk semua pengenalan dalam aplikasi.

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;
    }
  //...

Mengenali Penyakit Stroke

Perintah kenali diterima ketika pengguna mengklik Kenali! item di menu. Kode mendapatkan pointer ke tinta InkStrokes (pIInkStrokes) dari objekInkDisp, lalu meneruskan InkStrokes ke konteks recognizer menggunakan panggilan ke 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)) 
          {

Kode kemudian memanggil metode Recognize dari objek InkRecognizerContext, dengan meneruskan sebuah penunjuk kepada objek IInkRecognitionResult untuk menyimpan hasilnya.

              // Recognize
              IInkRecognitionResult* pIInkRecoResult = NULL;
              hr = g_pIInkRecoContext->Recognize(&pIInkRecoResult);
              if (SUCCEEDED(hr)) 
              {

Terakhir, kode menggunakan objek IInkRecognitionResult dan properti TopString untuk mengambil hasil pengenalan teratas ke dalam variabel string, melepaskan objek IInkRecognitionResult, dan menampilkan string dalam kotak pesan.

                  // 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);
                  }  }
        

Pastikan untuk mengatur ulang konteks recognizer antar penggunaan.

              // Reset the recognizer context
              g_pIInkRecoContext->putref_Strokes(NULL);
          }
          pIInkStrokes->Release();
      }
      // restore the cursor
      ::SetCursor(hCursor);
  }