|
//
// Basic Ink enabled Windows Forms application with
// handwriting recognition using InkAnalyzer
// Gavin Gear - http://blogs.msdn.com/gavingear
// 09/2006
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Ink; // The managed Tablet PC API
namespace BasicInkApplication
{
public partial class BasicInkApplication : Form
{
// The InkOverlay that we'll attach to our Form
private InkOverlay inkOverlay;
private InkAnalyzer inkAnalyzer;
public BasicInkApplication()
{
InitializeComponent();
// Create an InkOverlay object that's attached to the Form
this.inkOverlay = new InkOverlay(this);
// Enable the InkOverlay (default is Enabled == false)
this.inkOverlay.Enabled = true;
this.inkOverlay.Stroke += new InkCollectorStrokeEventHandler(inkOverlay_Stroke);
// Create a new InkAnalyzer
// - Associate with the InkOverlay's Ink object
// - Send the Form "this" as the synchronizing object
this.inkAnalyzer = new InkAnalyzer(this.inkOverlay.Ink, this);
// Hook up to the InkAnalyzer.ResultsUpdated event
// in order to be notified when BackgroundAnalyze() finishes
this.inkAnalyzer.ResultsUpdated +=
new ResultsUpdatedEventHandler(inkAnalyzer_ResultsUpdated);
// The InkOverlay needs to be disposed due to unmanaged resources
// used by the InkOverlay
this.FormClosing += new FormClosingEventHandler(BasicInkApplication_FormClosing);
}
// The InkOverlay.Stroke event is fired after a new stroke is
// collected by the InkOverlay
void inkOverlay_Stroke(object sender, InkCollectorStrokeEventArgs e)
{
// We have a new stroke, add it to the InkAnalyzer
this.inkAnalyzer.AddStroke(e.Stroke);
}
// Clean up unmanaged resources
void BasicInkApplication_FormClosing(object sender, FormClosingEventArgs e)
{
this.inkOverlay.Dispose();
this.inkAnalyzer.Dispose(); // Free the unmanaged resources
}
private void buttonRecognize_Click(object sender, EventArgs e)
{
// Kick off asynchronous analysis
// Should check that BackgroundAnalyze() returns true here
this.inkAnalyzer.BackgroundAnalyze();
}
// This event is fired when analysis is complete
void inkAnalyzer_ResultsUpdated(object sender, ResultsUpdatedEventArgs e)
{
// Note: Should check: e.Status.Successful == true
// here to confirm BackgroundAnalyze() was successful
MessageBox.Show(this.inkAnalyzer.GetRecognizedString());
}
}
} |