If you are planning on developing a Windows 7 Touch application, you may be wondering what development platform is the right choice for your application. Reviewing your requirements for your application and picking the right platform before you start can help you avoid roadblocks and design around limitations. Each development platform that is enabled for designing for touch has pros and cons. Here are some questions you should ask yourself before picking a development platform for touch.
Existing code and Developer Skillsets
- Are you a native code guy or .NET?
- Maybe you’re targeting web development?
- Are you planning to reuse some code?
- Do you have an existing application?
- Maybe you plan on also targeting Windows 7 Phone and want to reuse some of the code for your phone app.
User Experience & Design Goals
- Are you targeting cross platform?
- What types of gestures make sense for your application?
- Single touch good enough or do you need multi-touch?
- Is there a requirement for user install experience?
- Performance & Target Form Factors.
- Do you need text entry? If you’re targeting slates, you need to plan for no keyboard. You’ll need to consider how text will be input.
Let’s walk through some of the capabilities of each development platform. The following capabilities will be covered for each platform.
|Raw touch messages||Access to each touch point state and data associated (down, up, move, etc.)|
|Gesture support||Access to predefined touch actions (gestures) such as pan, pinch, press and hold, two finger tap, etc.|
|Manipulations and inertia||Allows combinations of translation, rotation, and scaling with multiple touch points. Manipulations are essentially gestures with values associated with them that describe the entire gesture.
Ability to a use inertia on objects after touch up.
|Promotion to mouse messages||If manipulations or gestures aren’t handled by your application, the touch input is converted into mouse messages. For example, an unhandled tap is generates a a left mouse click message. Another example would be an unhandled pinch gesture is generates a control mouse wheel message.|
|Deployment||How is the application installed? Is installation required?|
|TIP support||Ability to activate the Text Input Panel (TIP). Some of the development platforms allow you to leverage the Text Input Panel (TIP) while others do not. If the development platform you choose doesn’t support using the TIP, you will need to implement your own virtual keyboard for text input. See Todd Landstad’s presentation for a good overview of leveraging the TIP.|
If you want full control over your development, this platform has the least limitations to Windows Touch API’s. However, as with any native code project, you may have to write more code because there is less framework to do the work for you.
|Raw touch messages||Yes. WM_TOUCH combines down, up, move and other states into one message.|
|Gesture support||Yes. WM_GESTURE message is generated for common gestures.|
|Manipulations and inertia||Yes. For manipulations, the application needs to implement the IManipulationProcessor interface. For inertia, the IInertiaProcessor interface can be used in conjunction with the IManipulationProcessor interface.|
|Promotion to mouse messages||Yes. If you don’t handle a touch or gesture message, DefWindowProc will generate a corresponding mouse message.|
|Deployment||Installer required. Administrative rights required for install.|
|TIP support||Yes. TIP can be invoked by using creating and showing a caret. However, the TIP can’t be displayed in a full screen DirectX application.|
More info on native touch development: Windows Platform SDK – Windows Touch
.NET has two choices: Silverlight and WPF. Depending on the functionality of your application and your requirements, you may want to pick one of the development platforms over the other.
Silverlight can be hosted in the browser or out of the browser. For “in browser”, Internet Explorer forwards platform touch messages to plug-ins such as Silverlight that are running within Internet Explorer. For “out of browser”, Silverlight registers for touch input but there are some limitations when running out of browser (see below).
|Raw touch messages||Yes (with some exceptions). Silverlight registers for raw touch input. Silverlight processes touch messages at the level of the raw message, analogous to the platform WM_TOUCH message.
However, touch input is not supported for Silverlight out of browser applications running in full-screen mode. For full-screen mode, you must rely on promotion to mouse messages.
|Gesture support||No. If your requirements include gestures, you have to process touch input into gestures using your own application code, within the context of Silverlight.|
|Manipulations and inertia||No.|
|Promotion to mouse messages||Yes. Silverlight generally promotes raw touch events to mouse messages for legacy support.|
|Deployment||In browser: No installation required but Silverlight add on is a prerequisite;
Out of browser: Elevated trust install.
|TIP support||In browser: Yes.
Out of browser: No.
More info on Silverlight touch development: http://msdn.microsoft.com/en-us/library/dd894494(VS.95).aspx
Windows Presentation Foundation has support raw touch data as well as manipulation and inertia. WPF applications can detect and respond to touch in a manner similar to responding to other input, such as the mouse or keyboard, by raising events when touch occurs.
|Raw touch messages||Yes. The UIElement, UIElement3D, and ContentElement classes expose events that occur when a user touches an element. Several other controls support touch-enabled scrolling.|
|Gesture support||Yes through manipulations.|
|Manipulations and inertia||Yes. The UIElement supports manipulation. A manipulation is interpreted to scale, rotate, or translate.|
|Promotion to mouse messages||Yes. By calling the Cancel method on the event arguments in a manipulation event.|
|Deployment||Click once installer.|
More info on WPF touch development: Touch and Manipulation Input for .NET 4
HTML 5 is still under development but is quickly being supported by all modern browsers. While it is not targeted for touch, it is an option for cross platform, cross browser, web based applications.
|Raw touch messages||No.|
|Gesture support||Enabled through browser. More info on IE9 support.|
|Manipulations and inertia||No. Inertia enabled through browser for panning and scrolling.|
|Promotion to mouse messages||N/A. Hosted in browser.|
|Deployment||Hosted on website. Not required.|
The Windows Touch Guidance whitepaper is an excellent resource for details about developing for Windows Touch. A must read prior to starting your touch development.