gpt4 book ai didi

c++ - 使用 C++ 在 Windows 中输入笔

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:07 26 4
gpt4 key购买 nike

如何在 Windows 上使用压力笔输入?我正在制作一个绘画程序,并且一直在使用 wintab,但我的新计算机上不存在 wintab。 Wintab 似乎已被弃用,但显然有一些更新的 API,称为 Windows Ink 和 Tablet PC。

问题是我找不到关于如何实际使用最近的笔 API 的文档或示例。 API 需要可从普通的非托管 C++ 桌面应用程序使用。另外,如果可能的话,我真的宁愿避免使用 UWP,因为我不想处理“部署”或“签名”。

哪里有我可以下载的 SDK,它有 C/C++ 头文件和库,可以为我提供原始笔输入?

最佳答案

我使用 Realtimestylus API 而不是 wintab 获得了更好的结果。因为 wintab 似乎没有足够频繁地返回数据包以在绘制时平滑线条。

Windows RTS API 为我提供了更多信息包,从而在绘图时获得更流畅的结果,并且还可以访问更多笔信息,例如倾斜和笔按钮按下。

有一个很好的小型演示应用程序,它使用带有 SDL 的 RealTimeStylus: https://backworlds.com/under-pressure/它包括实现中的评论,其中解释了如何访问原始平板电脑输入。

示例代码包含从 rtscom.h 的接口(interface)类 IStylusSyncPlugin 派生的事件处理程序类。通过此接口(interface),您可以使用 STDMETHODS 注册笔和触摸事件,例如:STDMETHOD(StylusButtonDown){}。

要获得屏幕坐标中笔的实际位置有点困难。由于您首先需要使用 STDMETHOD(Packets) 将 x,y 坐标作为数据包获取。您还需要使用 IRealTimeStylus::GetPacketDescriptionData() 描述您想要接收哪些数据包以及接收顺序。

最后,您需要根据 dpi 将 X、Y 输入转换为屏幕坐标,使用 Gdiplus::Graphics::GetDpiX()

X = dpiX * (float)pLastPacket[g_lContexts[iCtx].x]/2540;

Y = dpiY * (float)pLastPacket[g_lContexts[iCtx].y]/2540;

所有这些都在 Anders Ekermo 的示例代码中提供。

希望对您有所帮助。

关于c++ - 使用 C++ 在 Windows 中输入笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com