使用 RealTimeStylus 类

RealTimeStylus 类是 StylusInput 应用程序编程接口的一部分, (API) 。 以下部分介绍 RealTimeStylus 类和 StylusInput API 的关键元素。

实例化 RealTimeStylus 类

创建 RealTimeStylus 对象时,可以选择将其附加到窗口句柄或控件。 将 RealTimeStylus 对象附加到窗口句柄需要其他权限。 有关这些权限的详细信息,请参阅 StylusInput API 的部分信任注意事项

注意

不能将 RealTimeStylus 对象附加到不同进程中的窗口或控件。

 

如果使用默认构造函数,则会创建一个 RealTimeStylus 对象,该对象只能接受来自另一个 RealTimeStylus 对象的输入。 有关连接两个 RealTimeStylus 对象的详细信息,请参阅 级联 RealTimeStylus 模型

RealTimeStylus 对象实现 IDisposable 接口。

扩展 RealTimeStylus 类

为了允许插件与来自平板电脑笔的数据流交互, RealTimeStylus 对象维护两个插件集合,这些集合可通过 C++ 中的 GetStylusSyncPluginGetStylusAsyncPlugin 方法以及托管代码中的 SyncPluginCollectionAsyncPluginCollection 属性访问。 可以通过在相应属性中调用集合的 AddStylusSyncPluginAddStylusAsyncPlugin 方法来添加插件。 有关创建和使用插件的详细信息,请参阅 插件和 RealTimeStylus 类。 有关确定是为特定任务创建同步插件还是异步插件的信息,请参阅 StylusInput API 的线程处理注意事项StylusInput API 的性能注意事项

同步插件必须实现 IStylusSyncPlugin 接口,异步插件必须实现 IStylusAsyncPlugin 接口。 每个插件都具有 IStylusSyncPlugin.DataInterestIStylusAsyncPlugin.DataInterest 属性。 RealTimeStylus 对象仅为插件订阅的方法调用插件的通知方法。 有关通知方法的详细信息,请参阅 插件数据和 RealTimeStylus 类

RealTimeStylus 对象实现 IStylusAsyncPlugin 接口。 实例化接受另一个 RealTimeStylus 对象输入的 RealTimeStylus 对象的唯一方法是使用默认构造函数并实现级联 RealTimeStylus 模型。 有关连接两个 RealTimeStylus 对象的详细信息,请参阅 级联 RealTimeStylus 模型

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

  1. RealTimeStylus 对象首先在其输入队列中检查插件数据对象,然后从平板电脑笔数据流检查插件数据对象。
  2. RealTimeStylus 对象将一个插件数据对象发送到其同步插件集合中的对象。 每个同步插件都可以将数据添加到输入或输出队列。
  3. 将插件数据对象发送到同步插件集合的所有成员后,插件数据对象将放置在 RealTimeStylus 对象的输出队列中。
  4. 然后 ,RealTimeStylus 对象检查下一个要处理的插件数据对象。
  5. RealTimeStylus 对象的输出队列包含数据,而 RealTimeStylus 对象将一个插件数据对象从其输出队列发送到其异步插件集合中的对象。 每个异步插件都可以将数据添加到输入队列或输出队列,但由于异步插件在用户界面 (UI) 线程上运行,因此数据将相对于 RealTimeStylus 对象正在处理的当前笔数据添加到队列中,与异步插件正在处理的数据无关。

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

显示平板电脑笔数据流的插图

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

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

下面是在收集墨迹的窗体上使用 RealTimeStylus 对象的最小方案。

  1. 创建实现 IStylusAsyncPlugin 接口的窗体。
  2. 创建附加到窗体上的控件的 RealTimeStylus 对象。
  3. 在表单的 IStylusAsyncPlugin.DataInterest 属性中设置对 StylusDown、Packets 和 StylusUp 通知的兴趣。
  4. 在窗体的 StylusDownPacketsStylusUp 方法中,添加代码以处理从窗体的 RealTimeStylus 对象发送的触笔向下、数据包和触笔通知。

有关此类应用程序的示例,请参阅 RealTimeStylus Ink 集合示例

使用平板电脑对象

每个已启用 的 RealTimeStylus 对象维护其可以与之交互的 Tablet 对象的唯一标识符列表。 RealTimeStylus 对象公开用于在唯一标识符和 Tablet 对象之间进行转换的两种方法:GetTabletContextIdFromTabletGetTabletFromTabletContextId 方法。

托管代码) 中 (TabletPropertyDescription 对象包含 PacketPropertyId 属性和 TabletPropertyMetrics 结构,该结构描述特定 Tablet 对象的属性的范围、分辨率和单位。 RealTimeStylus 对象的 GetDesiredPacketDescription 方法返回一个全局唯一标识符数组, (GUID) ,当这些数据包属性可用时,RealTimeStylus 对象转发到其插件。 若要修改 RealTimeStylus 对象传递给其插件的数据包属性集,请调用 RealTimeStylus 对象的 SetDesiredPacketDescription 方法。 GetTabletPropertyDescriptionCollection 方法 (RealTimeStylus 对象的托管代码) 采用唯一的平板电脑标识符并返回 TabletPropertyDescription 对象的集合。 这些数据包属性表示 GetDesiredPacketDescription 方法返回的平板电脑支持的属性子集。

有关标准数据包属性 GUID 的列表,请参阅 PacketPropertyGuids Constants 类。

特殊注意事项

以下列表描述了将 RealTimeStylus 对象与 Tablet 对象一起使用时要考虑的其他要点。

使用平板电脑笔

RealTimeStylus 对象通过多种通知方法将有关平板电脑笔的信息传递给其插件。 有关平板电脑笔的信息由通过 GetStyluses 方法获取的 Stylus 对象表示。 此对象是收集数据时平板电脑笔的表示形式。 由于插件将平板电脑笔数据作为平板电脑笔数据流的一部分接收,因此插件应使用触笔对象中的信息,而不是通过 Cursor 类检查特定平板电脑笔的当前状态。 有关如何将平板电脑笔和平板电脑笔按钮数据传递到插件的信息,请参阅 插件数据和 RealTimeStylus 类

若要获取 RealTimeStylus 对象自上次启用以来遇到的触笔对象的数组,请使用 RealTimeStylus 对象的 GetStyluses 方法。

Microsoft.Ink.Tablet

Microsoft.StylusInput.RealTimeStylus

级联 RealTimeStylus 模型

StylusInput API 的部分信任注意事项

插件数据和 RealTimeStylus 类

StylusInput API 的线程处理注意事项