StylusInput API 的体系结构

触笔 API 允许与平板电脑笔数据流进行交互。 若要与数据流交互,请将 RealTimeStylus 对象添加到应用程序,并将插件添加到 RealTimeStylus 对象。

StylusInput API 中提供了两个插件。 DynamicRenderer 对象实现 IStylusSyncPlugin 接口。 DynamicRenderer 对象在绘制墨迹时实时呈现墨迹。 GestureRecognizer 对象实现 IStylusSyncPluginIStylusAsyncPlugin 接口。 GestureRecognizer 对象可识别应用程序手势。

定义

以下术语用于描述 StylusInput API 的部分:

同步插件

实现 IStylusSyncPlugin 接口的类。 同步插件通常由 RealTimeStylus 对象直接调用。

异步插件

实现 IStylusAsyncPlugin 接口的类。 异步插件通常在应用程序的用户界面(UI)线程上调用。

同步插件集合

StylusSyncPluginCollection 集合,它是 IStylusSyncPlugin 对象的有序集合。 同步插件集合通常指分配给 RealTimeStylus 对象的 SyncPluginCollection 属性的集合。 只能将同步插件添加到同步插件集合。

异步插件集合

StylusAsyncPluginCollection 集合,它是 IStylusAsyncPlugin 对象的有序集合。 异步插件集合通常指分配给 RealTimeStylus 对象的 AsyncPluginCollection 属性的集合。 只能将异步插件添加到异步插件集合。

同步和异步插件

RealTimeStylus 对象旨在提供从平板电脑笔对数据流的实时访问。 为需要实时访问数据流的任务创建或使用同步插件,并且是计算上不托管的,例如用于数据包筛选。 为不需要对数据流进行实时访问的任务创建或使用异步插件,例如用于在 InkDisp 对象中创建和存储笔划。

某些任务在计算上可能要求很高,但需要对数据流进行实时访问,例如多击手势识别。 为了满足这些需求,StylusInput API 提供了一个级联 RealTimeStylus 模型,使你能够使用两个 RealTimeStylus 对象,每个对象在其自己的线程上运行。 有关级联 RealTimeStylus 模型的详细信息,请参阅 Cascaded RealTimeStylus 模型

有关使用和创建插件的详细信息,请参阅 使用 StylusInput API

平板电脑笔数据流

RealTimeStylus 对象有两个内部队列,其中包含平板电脑笔数据、输入队列和输出队列。 笔数据将转换为 Microsoft.StylusInput.PluginData 命名空间中类的实例。 以下列表描述了 RealTimeStylus 对象如何处理平板电脑笔数据:

RealTimeStylus 对象首先在其输入队列中检查插件数据对象,然后从平板电脑笔数据流检查。

RealTimeStylus 对象将一个插件数据对象发送到其同步插件集合中的对象。 每个同步插件都可以将数据添加到输入或输出队列。

将插件数据对象发送到同步插件集合的所有成员后,插件数据对象将放置在 RealTimeStylus 对象的输出队列中。

RealTimeStylus 对象,然后检查要处理的下一个插件数据对象。

虽然 RealTimeStylus 对象的输出队列包含数据,但 RealTimeStylus 对象将一个插件数据对象从其输出队列发送到其异步插件集合中的对象。 每个异步插件都可以将数据添加到输入或输出队列。 但是,由于异步插件在 UI 线程上运行,因此数据将添加到队列中,相对于当前笔数据,RealTimeStylus 对象正在处理,而不是与异步插件正在处理的数据有关。

下图演示了通过 RealTimeStylus 对象及其插件集合的平板电脑笔数据流。

通过 realtimestylus 对象及其插件集合 平板电脑笔数据流

在此关系图中,标记为“A”和“B”的圆圈表示已添加到 RealTimeStylus 对象的输出队列且尚未发送到异步插件集合的平板电脑笔数据。 标记为“C”的圆圈表示 RealTimeStylus 对象当前正在处理的平板电脑笔数据。 它将发送到同步插件集合并放置在输出队列中。 空圆表示输出队列中添加未来平板电脑笔数据的位置。

有关如何将特定数据添加到队列和处理的详细信息,请参阅 插件数据和 RealTimeStylus 类

触笔INput API

StylusInput API 主要驻留在 Microsoft.StylusInputMicrosoft.StylusInput.PluginData 命名空间中。 但是,StylusInput API 还引用 Microsoft.Ink 命名空间中的一些类,例如 Tablet 类、TabletPropertyDescriptionCollection 集合以及 ApplicationGestureSystemGesture 枚举。

DynamicRenderer

GestureRecognizer

RealTimeStylus

IStylusAsyncPlugin

IStylusSyncPlugin

使用触笔Input API

Cascaded RealTimeStylus 模型