win10中获取手写笔压感数据使用GetPointerPenInfo函数,该函数在win7中不支持。
注:代码来源于互联网
使用方法:
1、在消息循环中增加处理 WM_POINTERUPDATE 消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
...
case WM_POINTERUPDATE:
if(!OnPointer(hWnd, message, wParam, lParam))
return DefWindowProc(hWnd, message, wParam, lParam);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
2、在OnPointer方法中处理该消息
LRESULT OnPointer(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
if (!GetPointerType(pointerId, &pointerType)) //获取消息类型
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
if (pointerType == PT_PEN) //手写笔的消息
{
POINTER_PEN_INFO penInfo;
if (GetPointerPenInfo(pointerId, &penInfo))
{
Draw(penInfo.pointerInfo.ptPixelLocation.x, //X坐标
penInfo.pointerInfo.ptPixelLocation.y, //Y坐标
penInfo.pressure); //压力值0~1024
}
return TRUE;
}
else if (pointerType == PT_TOUCH) //触摸的消息
{
POINTER_TOUCH_INFO touchInfo;
if (GetPointerTouchInfo(pointerId, &touchInfo))
{
Draw(touchInfo.pointerInfo.ptPixelLocation.x, //X坐标
touchInfo.pointerInfo.ptPixelLocation.y, //Y坐标
touchInfo.pressure); //压力值(512固定)
}
return TRUE;
}
//其他的消息返回FALSE,交给windows的默认处理函数
return FALSE;
}