Distinguishing Pen Input from Mouse and Touch
When your application receives a mouse message (such as WM_LBUTTONDOWN), it may call the Win32 API, GetMessageExtraInfo function to evaluate whether the message originated from a pen or a mouse device.
The value returned from GetMessageExtraInfo needs to be mask-checked against 0xFFFFFF0, and then compared with 0xFF515700. The following definitions may make this clearer:
#define MI_WP_SIGNATURE 0xFF515700 #define SIGNATURE_MASK 0xFFFFFF00 #define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE
If the comparison is true, then this mouse message was generated by a Tablet PC pen or touch screen. In all other cases, you can assume that this message was generated by a mouse device.
The lower 8 bits returned from GetMessageExtraInfo are variable. Of those bits, 7 are used to represent the cursor ID, zero for the mouse or a variable value for the pen ID. Additionally, in Windows Vista, the eighth bit is used to differentiate touch input from pen input (0 = pen, 1 = touch).