我使用 Realtimestylus API 而不是 wintab 获得了更好的结果。因为在绘制时,wintab 似乎没有足够频繁地返回数据包以实现平滑线。
Windows RTS API 给了我更多的信息包,因此绘图时的结果更流畅,并且可以访问更多的笔信息,例如倾斜和笔按钮按下。
有一个使用 RealTimeStylus 和 SDL 的不错的小型演示应用程序:
https ://backworlds.com/under-pressure/
它在实现中包含注释,其中解释了如何访问原始平板电脑输入。
示例代码包含从 rtscom.h 中的接口类 IStylusSyncPlugin 派生的事件处理程序类。通过此接口,您可以使用 STDMETHODS 注册笔和触摸事件,例如:STDMETHOD(StylusButtonDown){}。
要获得屏幕坐标中的实际笔位置有点困难。因为您首先需要使用 STDMETHOD(Packets) 将 x,y 坐标作为数据包获取。您还需要使用 IRealTimeStylus::GetPacketDescriptionData() 来描述要接收的数据包以及接收顺序。
最后,您需要使用 Gdiplus::Graphics::GetDpiX() 根据 dpi 将 X、Y 输入转换为屏幕坐标
X = dpiX * (float)pLastPacket[g_lContexts[iCtx].x] / 2540;
Y = dpiY * (float)pLastPacket[g_lContexts[iCtx].y] / 2540;
所有这些都在 Anders Ekermo 的示例代码中提供。
希望能帮助到你。