| Foreword | xi |
| Acknowledgments | xv |
| Introduction | xvii |
| PART I THE TABLET PC AND ITS APPLICATIONS | |
| 1 Tablet Computing Comes of Age | 3 |
| What Makes a Tablet Computer | 4 |
| Form Factor | 4 |
| Pen Input | 5 |
| Stand-Alone and General-Purpose | 5 |
| What Isn't a Tablet Computer | 6 |
| The Role of Tablet Computers | 7 |
| A Brief History of Tablet Computing | 9 |
| GRiD GRiDPad | 10 |
| GO PenPoint | 11 |
| Microsoft Windows for Pen Computing | 12 |
| Apple Newton | 13 |
| Palm Computing PalmPilot | 15 |
| Microsoft Pocket PC | 16 |
| In a Little While | 17 |
| The Microsoft Tablet PC | 18 |
| The Birth of Microsoft Tablet PC | 19 |
| Microsoft Tablet PC Hardware Guidelines | 20 |
| Microsoft Tablet PC Software | 20 |
| Could This Be the One? | 22 |
| 2 Designing Tablet PC Applications | 25 |
| User Research | 25 |
| Tablet Usability | 26 |
| Application Usability | 27 |
| Pen Usability | 31 |
| Of Mice and Pen | 32 |
| Tablet Displays | 32 |
| Digitizer Technology | 33 |
| Digitizer Distortion | 37 |
| Parallax | 39 |
| Still Motion | 41 |
| Handedness | 44 |
| Thinking in Ink | 46 |
| Ink Modeling | 47 |
| Ink Interaction | 50 |
| Ink Realism | 57 |
| PART II THE TABLET PC PLATFORM SDK | |
| 3 Introduction to the Tablet PC Platform SDK | 65 |
| A Sort of Homecoming | 65 |
| Finding the Right Operating System for the Job | 68 |
| Managed APIs | 69 |
| Ink Controls | 70 |
| COM Automation APIs | 70 |
| Sample Applications | 71 |
| Installing the Tablet PC Platform SDK | 72 |
| System Requirements | 72 |
| Getting the SDK | 73 |
| Setting Up Your Environment | 73 |
| Anatomy of the Tablet PC Platform SDK | 78 |
| Overview of the Managed API | 79 |
| All That You Can't Leave Behind | 81 |
| Design Goals of the API | 82 |
| Managed API Object Survey | 87 |
| Ink Data Management API | 90 |
| Ink Recognition API | 91 |
| Ink Control Comparison with Managed API | 92 |
| Welcome to the Great Adventure | 94 |
| 4 Tablet PC Platform SDK: Tablet Input | 95 |
| Sample Applications | 95 |
| Capturing Input from the Pen | 96 |
| Requirement #1Mouse Emulation | 96 |
| Requirement #2Digital Ink | 97 |
| Requirement #3Pen-Based Actions | 98 |
| Summing Up the Requirements | 98 |
| Anatomy of the Tablet PC's Tablet Input Subsystem | 98 |
| Tablet Hardware | 100 |
| Chock-full of HID-y Goodness | 101 |
| The Center of the TIS Universe: Wisptis.exe | 102 |
| Winlogon Desktop Support | 108 |
| What About Ink? | 109 |
| Platform SDK Support for Tablet Input | 109 |
| Getting Ink from a Tablet | 109 |
| When Ink Is Not Enough | 112 |
| InkCollector Events | 121 |
| InkOverlay Events | 142 |
| Specifying the Tablet Data to CapturePacket Properties | 142 |
| Extending InkOverlay Behaviors | 155 |
| Sample Application: TopOfPenErase | 155 |
| Sample Application: ModelessSwitch | 160 |
| Getting Introspective | 163 |
| Tablets Collection | 163 |
| Tablet Class | 163 |
| Common Properties on InkCollector and InkOverlay | 170 |
| Best Practices for InkCollector and InkOverlay | 172 |
| 5 Tablet PC Platform SDK: Ink Data Management, Part I | 175 |
| Ink and Stroke Objects | 176 |
| Introduction to the Ink, Stroke, and Strokes Classes | 178 |
| Using Strokes Collections | 186 |
| Creation, Deletion, and Ownership of Stroke Objects | 193 |
| Rendering Digital Ink | 208 |
| Renderer Class | 208 |
| Adding StyleThe DrawingAttributes Class | 225 |
| Special Rendering Effects | 240 |
| 6 Tablet PC Platform SDK: Ink Data Management, Part II | 245 |
| Stroke Geometry | 245 |
| Computing the Bounding Box of a Stroke | 246 |
| Retrieving the Points of a Stroke | 248 |
| Computing Intersections of a Stroke | 251 |
| Retrieving and Setting the Packet Data of a Stroke | 258 |
| Retrieving the Cusps of a Stroke | 260 |
| Putting It Togetherthe StrokeDataViewer Example | 263 |
| Transforming Strokes | 276 |
| Targeting and Hit-Testing Ink Strokes | 281 |
| Different Types of Hit-Testing | 281 |
| Hit-Testing Functions | 284 |
| Splitting and Trimming Ink | 311 |
| Splitting Strokes | 311 |
| Clipping/Trimming Strokes | 312 |
| Serialization, the Clipboard, and Drag and Drop | 325 |
| Serialization | 325 |
| Using the Clipboard | 334 |
| Implementing Drag and Drop | 341 |
| 7 Tablet PC Platform SDK: Ink Recognition | 347 |
| Recognizer Architecture | 348 |
| Text vs. Object Recognition | 348 |
| Synchronous vs. Asynchronous Recognition | 349 |
| Recognition Results | 350 |
| Performing Simple Recognition | 351 |
| Recognizing Text | 351 |
| Recognizing Application Gestures | 354 |
| Using the Recognition Classes | 367 |
| Obtaining a Recognizer to Use | 367 |
| Initiating a Recognition Session | 368 |
| Supplying Strokes to the Recognizer | 371 |
| Getting Results I: Easy Synchronous Recognition | 372 |
| Getting Results II: Electric Boogaloo (a.k.a. Harder Synchronous Recognition) | 376 |
| Getting Results III: The Final Chapter (a.k.a. Asynchronous Recognition) | 384 |
| Working with Recognition Results | 391 |
| Storing Recognition Results | 412 |
| Recognition Properties | 413 |
| Improving Recognition Results | 415 |
| 8 Ink Controls | 421 |
| Achtung Baby | 421 |
| InkEdit | 422 |
| InkEdit Basics | 423 |
| Working with Ink | 433 |
| Recognizing Ink and Gestures | 435 |
| InkEdit Parting Thoughts | 444 |
| InkPicture | 446 |
| PART III ADVANCED TABLET PC TOPICS | |
| 9 Updating Existing Applications | 459 |
| Even Better than the Real Thing | 459 |
| User Benefits of Integration | 460 |
| Business Benefits of Integration | 462 |
| Technical Considerations | 463 |
| Application Design | 463 |
| Performance | 469 |
| InkPadJunior | 491 |
| PART IV APPENDIXES | |
| A BuildingTabletApps Library Reference | 501 |
| B Tablet PC Hardware Guidelines | 511 |
| INDEX | 515 |