StylusInput API 的体系结构

StylusInput 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 模型的详细信息,请参阅 级联 RealTimeStylus 模型

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

Tablet 触控笔数据流

RealTimeStylus 对象具有两个内部队列,用于承载平板电脑笔数据:输入队列和输出队列。 笔数据将转换为 Microsoft.StylusInput.PluginData 命名空间中的类实例。 以下列表介绍了 RealTimeStylus 对象如何处理平板电脑笔数据:

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

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

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

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

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

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

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

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

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

StylusInput API

StylusInput API 主要位于 Microsoft.StylusInputMicrosoft.StylusInput.PluginData 命名空间中。 但是,StylusInput API 也引用 Microsoft.Ink 命名空间中的某些类,例如 Tablet 类、 TabletPropertyDescriptionCollection 集合以及 ApplicationGestureSystemGesture 枚举。

DynamicRenderer

GestureRecognizer

RealTimeStylus

IStylusAsyncPlugin

IStylusSyncPlugin

使用 StylusInput API

级联 RealTimeStylus 模型