Will o' the WISP Lite

Windows Mobile 6 contains a new API for Ink input and gestures based on the Tablet PC WISP (Windows Ink Services for Pen Windows Ink Services Platform, that's what the Tablet PC guys call it). It is a reduced set of features for a PDA/Phone device form factor (hence the Lite) . Why are we doing this? Well, to be inline with our bigger brethren and to ensure handwriting is consistent in all Microsoft platforms. Ink stored in Ink Serialized Format (ISF) will be viewable and modifiable on Windows Mobile.

Here's a sample snippet of C++ code that shows you how you can enable ink capture.

 void CreateInkRegion(HWND hWnd, HINSTANCE hInstance)
{
    HWND labelInk = NULL;
    HWND hWndInk = NULL;
    HWND buttonRecognize = NULL;
    HWND labelRecoText = NULL;
    HRESULT hr = S_OK;

    // Create the inkoverlay object
    hr = ::CoCreateInstance(CLSID_InkOverlay,
                            NULL, CLSCTX_INPROC_SERVER,
                            IID_IInkOverlay, (void**)&g_pInkOverlay);
    ASSERT(SUCCEEDED(hr));
   
    // attach the inkoverlay object to the window and enable it.
    hr = g_pInkOverlay->put_hWnd((long)hWndInk);
    ASSERT(SUCCEEDED(hr));
    hr = g_pInkOverlay->put_Enabled(VARIANT_TRUE);
    ASSERT(SUCCEEDED(hr));

    return;
}

Unfortunately we do not have any Managed support yet, but you never know, things might improve when MEDC 2007 comes around. I'm sure one day you can do this in C# on a Windows Mobile device:

 Private Inkov As Microsoft.WindowsMobile.Ink.InkOverlay
public Form1()
{
   InitializeComponent();
   // create the InkOverlay object and bind to Form1
   this.Inkov = new Microsoft.Ink.InkOverlay();
   this.Inkov.Handle = this.Handle;
   this.Inkov.Enabled = true;
}

And to be able to bind the Ink Overlays to any control to ink-enable your applications by changing the target handle:

    this.Inkov.Handle = textbox1.Handle;
   this.Inkov.Handle = picturebox1.Handle;