sInk 和 tInk 对象

为了帮助在应用程序中支持墨迹,有两个对象,这两个对象都可以嵌入,并且受任何 OLE 容器支持。 它们是通过调用 Ink.剪贴板Copy 方法 (Rectangle、InkClipboardFormats、InkClipboardModes) Ink.ClipboardCopy 方法 (Strokes、InkClipboardFormats、InkClipboardModes) 方法生成的,它们是:

  • 文本墨迹对象 (tInk) 。 这是一个 OLE 对象,表示应形成单词的墨迹。 tInk 对象允许将手写墨迹转换为文本,作为识别器返回的文本或从识别替换列表获取的选择。 墨迹的颜色和大小可以通过编程方式设置,并且可以基于对象周围文本的属性。 tInk 对象旨在包含单个单词。tInk 对象是一个小型的轻型对象,可以执行简单的操作,例如,为设备上下文 (HDC) 和 RECT) 指定一个句柄呈现 (,并在给定流) 的情况下将自身保留 (。 使用 tInk 对象可在使用手写和文本输入的应用程序中工作时提供无缝用户体验。
  • 草绘墨迹对象 (sInk) 。 这是一个 OLE 对象,表示不应形成单词的墨迹。 sInk 对象被解释为绘图。 sInk 对象也可用于表示多个单词。

这些对象可用于应用程序之间的互操作性,方法是将应用程序放置在剪贴板上的 OLE 对象槽中,或者将它们嵌入 RTF (RTF) 。

可以通过以下方式使用 tInk 和 sInk 对象:

  • Microsoft Word 2002 支持 tInk 和 sInk 对象。 用户可以使用 Word 2002 中提供的书写和绘图文本输入面板将墨迹插入Word文档中。 此墨迹作为 OLE 对象嵌入到 Word 文件中,其中包含 sInk 或 tInk 对象的 CLSID。
  • Tablet PC InkEdit 控件使用 tInk 对象。 InkEdit 控件是标准 RichTextBox 控件的子类。 墨迹作为 tInk 对象插入 InkEdit 控件的 RTF 流。
  • 当应用程序将所选 Ink 对象移动到剪贴板时,OLE 对象剪贴板槽包含 tInk 或 sInk OLE 对象。

例如,应用程序可以识别手写并将任何 Ink 对象标记为 tInk 对象。 然后,如果在墨迹中选择一个单词并将其复制并粘贴到Word,则该单词的替换项将显示在 Word 2002 中。

注意

将 sInk 或 tInk 对象作为 OLE 对象放置在剪贴板上时,Tablet PC 平台的剪贴板支持会自动选择增强型图元文件 (EMF) 标志。 对象本身存储在剪贴板中的嵌入源和对象描述符槽中。

 

再举一个例子,通过使用 sInk 对象,你可以在应用程序中绘制墨迹草图,将草图复制并粘贴到 Word 2002,然后在 Word 中使用 Tablet PC 输入面板编辑绘图。

若要成功包含 tInk 对象,应用程序必须实现对嵌入对象的 OLE 容器支持。 然后,若要使容器完全支持 tInk,必须建立:

  • 修改“查找”和“替换”代码。 必须查询这些对象的类型,而不是在搜索中跳过嵌入的对象。 如果它们是 tInk 对象,则必须实例化它们并查询相应的文本。
  • 对选择行为的修改。 选择的 tInk 对象不应与大小控点一起显示。 选择它们的方式应与在文档中选择文本的方式相同。 对象的选择代码必须检测类型是否为 tInk,并相应地显示所选内容。
  • 使用环境属性。 需要将字体大小、颜色和粗体格式等环境属性传输到 tInk 对象。 应用这些属性会更改手写墨迹的宽度,因此需要通过调用 GetInkExtent 方法IOleObject::GetExtent 方法更新大小。
  • 重写默认的 IOleObject::D oVerb 方法处理。 这允许转换为文本以将一批 tInk 对象传递给识别器,然后识别器可以将单词分解为识别段。

有关将单词分解为识别段的详细信息,请参阅 识别段