Last couple of months I’ve been working on very cool project that utilizes new multi-touch features in Windows 7. Although I can’t talk yet about our product, I thought it would be good to start sharing my experience with multi-touch programming. I’ll begin with some general resources to get you started.
Of course first thing you need is a multi-touch capable hardware. As far as I know currently there are only three devices available on the market. Those lucky to be at PDC could see that most demos were run on HP TouchSmart All-in-One PC, or Dell Letitude XT tablet. Later in December HP released TouchSmart tx2z tablet, and this week Dell announced specs on Letitude XT2. For my work I use HP TouchSmart IQ504 PC.
The good news is that we have already seen some announcements from other manufacturers, and can expect number of devices to increase closer to Windows 7 release date.
In terms of touch-screen technology both tablets use the same DuoSense capacitive digitizer from N-Trig, while HP All-in-one PC uses optical overlay developed by NextWindow. The main difference is that NextWindow device supports only two touch points, while N-Trig’s can recognize more contacts.
Unfortunately multi-touch works only with dedicated hardware, so you can’t use other digitizers (like Wacom’s), touchpads or TabletPCs. Also there is no way to emulate multi-touch on Windows 7, for example by attaching multiple mice, although this is supported on Surface SDK emulator as demonstrated by Scott Hanselman (see around 14:30).
In terms of software you need two things: Windows 7 and proper multi-touch driver for your device. Currently I run on Windows 7 Beta 1 (build 7000 for x86), and when I did clean install today most of the drivers are now available through Windows Update. The only driver I had to install manually was for Ralink WLAN adapter. However the TouchSmart version I have doesn’t have TV tuner, so if yours does you might need to install some additional software. Fortunately Kurt Brockett published detailed guide how to setup Windows 7 on HP TouchSmart.
If by any chance the multi-touch drivers won’t install for you automatically, you can download them directly from NextWindow’s or N-trig’s websites:
To verify all works fine open any page in IE8 and you should be able to use two fingers for zooming.
Here are some other areas in Windows 7 that were enhanced with multi-touch features:
- Panning with inertia is enabled “everywhere” where scrollbars exist.
- Choose a brush from the “brush gallery” and you can then multi touch finger paint.
- Hearts/Solitaire have been optimized for touch
- Windows Snapping (Aero Snap) with Touch
- Aero Peek with Touch
- Taskbar Jump Lists with Increased spacing
- Windows Media Player
- Windows Photo Viewer
- Zoom, Rotate, Panning and Flicks
- XPS Viewer
- Gestures (Zoom, Two-Finger Tap, Panning)
- Media Center
- Direct Panning in most Scrollable Views and Menus
- Touch Keyboard / TIP
- Multi-touch touch keyboard
- Internet Explorer 8
- Drag Menu (Address Bar) with Increased Spacing
- Increased Spacing for Favorites with Touch
- Gesture (Zoom, Panning, Flicks back and forth)
- Windows Live Photo Gallery
- Gesture support in the Viewer
You can also download IdentityMine’s Air Hockey game from: www.identitymine.com/airhockey
Tip: If you are using touch on regular basis touch it is a good idea to increase the size of Windows UI (fonts, icons, etc.) by changing your display settings to Medium (125%). This will make Windows much more “touchable”.
Most of what we know so far about multi-touch API’s introduced in Windows 7 and WPF 4.0 comes from PDC session
by Reed Townsend and Anson Tsao.
There are also two later sessions from WinHEC 2008: Multi-Touch in Windows 7 Overview covers some basics and repeats information from PDC, while Multi-Touch Driver Development and Logo Compliance is more toward hardware developers.
Recently published Windows 7 SDK Beta includes header files for WM_TOUCH, WM_GESTURE messages, and related functions and structures. It also includes some documentation and samples on this (also available on MSDN).
When you have all of above installed, you can try some code samples from hands on labs from PDC available on MSDN Code Gallery. These samples are both in C++ and C#. But to get it working in WPF you will need some more advanced framework in place, and I suggest you first take a look at the Multi-touch Vista project on CodePlex. You can take a look at MIRIA SDK that adds multi-touch support to Silverlight apps. Finally, for those of you that already work with TUIO libraries (like Touchlib) here is an applet to translate WM_TOUCH to TUIO messages.
More information in multi-touch and related technology can be found in the great NUI Group Forum. You can also find all information how to build multi-touch device yourself.
I hope that this information will get you started, and I will try to publish more information on multi-touch programming in C# in next few days. If you have any questions or suggestions please leave a comment.