Which Microsoft Ink API framework is the best one to use for my app?
This is a developer choice based on the target platform(s), operating system(s), and the type of desktop app that is needed. Wacom strongly encourages use of the latest Windows 10 Microsoft Ink APIs as they afford the broadest range of ink support over all Windows 10 supported platforms. Please see Reference for more information.
What other options are available for adding ink to my app?
There are two other APIs that can be considered: Wintab (overview here: Wintab Overview) and the WILL SDK. Technically, Wintab does not supply system ink, but it does provide support for delivering very high quality tablet data to your app. The WILL Ink API provides system ink data within a structure framework supporting stroke rendering and semantic analysis.
What are the pros and cons of using the Microsoft Ink APIs vs Wintab in my app?
Please see the list of Wintab pros and cons of each API on the Wintab FAQs page.
What types of applications benefit from using Microsoft Ink APIs
Please see Overview for a list of the typical ink apps.
Do Wacom devices support Windows Ink APIs?
All Wacom tablets supported by the Wacom driver are supported by this API. Get the tablet driver that supports your device at: https://www.wacom.com/support/product-support/drivers.
How does ink data returned through Wintab compare to the data supported through Microsoft Ink APIs?
The table below gives a high-level summary of the pen properties that can be obtained from Wintab and from Microsoft Ink APIs (MIS):
|Timestamp||Wintab: Depending on the Wintab context, specifies either the time in milliseconds when the ink packet was posted from the hardware (absolute mode), or the elapsed time in milliseconds since the last packet (relative mode). Absolute mode timestamps are synced with the system clock.|
MIS: Specifies the time of the packet in milliseconds when the ink packet was received by the app.
|X||Wintab: X tablet or screen coordinate (pixels), depending on the Wintab context.|
MIS: X screen coordinate in device-independent pixels (DIP).
|Y||Wintab: Y tablet or screen coordinate (pixels), depending on the Wintab context.|
MIS: Y screen coordinate in device-independent pixels (DIP).
|Z||Wintab: Height above tablet surface (arbitrary count).|
MIS: Height above tablet surface (arbitrary count).
|Tip Pressure||Wintab: Pen tip-to-surface pressure data value from 0 through max pen pressure.|
MIS: Pen tip-to-surface pressure data value from 0 through max pen pressure.
|Tangential Pressure||Wintab: A unitless number reported for the wheel on the airbrush pen only.|
MIS: Not supported.
|Pen orientation (tilt)|
[not all pens support tilt]
XTilt: The plane angle between the Y-Z plane and the plane that contains the Y axis and the axis of the input device (typically a pen/stylus).
YTilt: The plane angle between the X-Z plane and the plane that contains the X axis and the axis of the input device (typically a pen/stylus).
Wintab: Supports the calculation of orientation (twist) angles as described through the Wintab DVC_ORIENTATION WTInfo query.
MIS: Supports orientation angle values as described.
|Pen Rotation (twist)|
[not all pens support twist]
The clockwise rotation in degrees of a pen device around its own major axis (such as when the user spins the pen in their fingers).
Wintab: Supports rotation (twist) angles as described through the Wintab DVC_ORIENTATION WTInfo query.
MIS: Supports rotation angle values as described.
|Buttons||Wintab: Supports access to all pen buttons.|
MSI: Supports all Wintab supported buttons except upper barrel.
|Cursor||Wintab: Specifies the cursor that generated the data packet. A cursor type corresponds to a pen type (e.g. grip, airbrush, art, etc.). See Basics for more information on cursors.|
MSI: Would have to use a low-level API, PointerPointProperties.GetUsageValue with device usagePage and usageId
|Pen serial number||Wintab: Returns a manufacturer-specific physical identifier for the cursor (called CSR_PHYSID on Wintab). This value will distinguish a specific physical pen from others of the same pen model.|
MSI: Would have to use a low-level API, [PointerPointProperties.GetUsageValue}(https://docs.microsoft.com/en-us/uwp/api/windows.ui.input.pointerpointproperties.getusagevalue?view=winrt-19041) with device usagePage and usageId
Wintab API: Wintab Overview
Windows.UI.Input.PointerPoint class: https://docs.microsoft.com/uwp/api/windows.ui.input.pointerpoint
Windows.UI.Input.PointerPointProperties class: https://docs.microsoft.com/uwp/api/Windows.UI.Input.PointerPointProperties
Where can I find out about the Microsoft Ink APIs?
Where can I find Microsoft Ink API programming sample code?
There is a list of programming sample sources on the Basics page.
Where can I find out more about Microsoft Ink API programming?
Check out the programming sample and informational links on the Basics page.
My ink app doesn’t work with my Wacom device. What can I do to troubleshoot?
To ensure that ink is enabled from your Wacom device to be used in your app, here is a procedure you can follow to try and find the problem:
- Make sure that you have the Wacom driver that supports your device: https://www.wacom.com/support/product-support/drivers.
- Attach your Wacom device and confirm that the device stylus can move the cursor and select objects on the desktop.
- Open the Windows Ink Workspace app, Whiteboard, and verify you can draw with pressure using the device stylus. See https://support.microsoft.com/help/17207/windows-10-use-windows-ink for details.
- In your app, check that the app is indeed receiving ink data packets and that data packet coordinates are correctly being mapped into your app client space.
- Open tablet preferences and make sure the Windows Ink checkbox is enabled on the Mapping tab for the pen you are using.
- If all else fails, please contact developer support: https://developer.wacom.com/developer-dashboard/support.
Why does my ink app have problems when I try to draw small dots?
Operations in graphics applications that require very small dots of ink, so called “stippling,” may not work correctly because of user system settings for Press-And-Hold-To-Right-Click (PHRC) causing the system to misinterpret stippling operations as trying to activate PHRC. One solution is to disable PHRC. Another good solution is to use Wintab as an ink source in your app, as it does not use system ink.
Why are some controls in my ink app not responding to pen input?
In some releases of Windows 10 Creative Update, using an ink stylus caused problems with selecting app controls (dropdowns, text selection, PHRC, etc.). Those problems were addressed in subsequent Windows 10 patch releases. However, because Microsoft is constantly evolving their Windows 10 inking experience, it is always a good idea to test your ink app with the latest Windows 10 release to make sure this kind of negative experience does not affect your users. One way to safeguard against this kind of behavior is to use Wintab as the source of pen input to your app (for both creative ink content as well as UI interactions). Click here to view the Wintab Overview.
Overview - Introduction to and overview of Microsoft Ink APIs
Basics – Details on how to write Ink API applications
Reference – Microsoft Ink API details