为了帮助应用程序中支持墨迹,有两个对象可以嵌入,并且可由任何 OLE 容器支持。 它们通过调用 Ink.ClipboardCopy 方法(Rectangle、InkClipboardFormats、InkClipboardModes) 或 Ink.ClipboardCopy 方法(笔划、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。
- 平板电脑 InkEdit 控件使用 tInk 对象。 InkEdit 控件是标准 RichTextBox 控件的子类。 墨迹作为 tInk 对象插入 InkEdit 控件的 RTF 流中。
- 当应用程序将所选 Ink 对象移动到剪贴板时,OLE 对象剪贴板槽包含 tInk 或 sInk OLE 对象。
例如,应用程序可以识别手写并将任何 Ink 对象标记为 tInk 对象。 然后,如果选择墨迹中的单词并将其复制并粘贴到 Word,则 Word 2002 中会显示该单词的替代项。
注意
将 SInk 或 tInk 对象放在剪贴板上作为 OLE 对象时,平板电脑平台的剪贴板支持会自动为你选择增强的图元文件(EMF)标志。 对象本身存储在“剪贴板”中的嵌入源和对象描述符槽中。
另一个示例是,通过使用 sInk 对象,可以在应用程序中绘制墨迹草图,将草图复制并粘贴到 Word 2002,然后使用 Word 中的平板电脑输入面板编辑绘图。
为了成功包含 tInk 对象,应用程序必须实现对嵌入对象的 OLE 容器支持。 然后,若要使容器完全支持 tInk,必须建立:
- 对查找和替换代码的修改。 必须对这些对象进行查询,而不是跳过搜索中的嵌入对象。 如果它们是 tInk 对象,则必须实例化并查询相应的文本。
- 对选择行为的修改。 选择 tInk 对象绝不应与大小控点一起显示。 应采用与在文档中选择文本的方式相同来选择它们。 对象的选择代码必须检测类型是否为 tInk 并相应地显示选择。
- 使用环境属性。 需要将字体大小、颜色和粗体格式等环境属性传输到 tInk 对象。 应用这些属性会更改手写墨迹的宽度,因此调用 GetInkExtent 方法 或 IOleObject::GetExtent 方法需要大小更新。
- 重写默认 IOleObject::D oVerb 方法处理。 这样,转换到文本即可将一批 tInk 对象传递给识别器,然后可以将单词分解为识别段。
有关将字词分解为识别段的详细信息,请参阅 识别段。