复杂脚本处理

下面是文本的显示和相关处理选项,以支持精细版式效果或复杂脚本:

  • 文本函数
  • 编辑控件
  • 丰富的编辑控件
  • Uniscribe

选择的选项取决于以下因素:

  • 文本或脚本的类型。
  • 实现模型,例如,应用程序的文本布局和换行处理。
  • 更新现有应用程序与创建新应用程序。

通常,执行相对简单的脚本处理的应用程序可以选择任何选项来处理复杂脚本。 但是,为了最全面地控制复杂的脚本处理,建议使用 Uniscribe。

使用文本函数的复杂脚本处理

通常使用纯文本(即使用相同的字样、粗细、颜色等)的应用程序使用标准文本函数(例如 TextOutExtTextOutTabbedTextOutDrawTextGetTextExtentExtentExPoint)来编写文本和测量行长。 这些函数支持处理复杂脚本和精细版式效果。 有关详细信息,请参阅 字体和文本

通常,标准文本支持对处理复杂脚本的应用程序是透明的。 但是,在编写支持精细版式和处理复杂脚本的应用程序时,应注意一些要遵循的特定规则:

  • 应用程序应在缓冲区中保存字符并一次显示整行文本,而不是在用户键入每个字符时调用 ExtTextOut 。 此机制允许高级文本调整模块使用上下文正确重新排序和生成 字形
  • 应用程序应使用 GetTextExtentExPoint 来确定行长,而不是从缓存字符宽度计算行长,因为字形的宽度可能因上下文而异。
  • 应用程序应选择性地添加对从右到左阅读顺序和右对齐方式的支持。
  • 复杂脚本或精细版式所需的重新排序和上下文处理要求在简单脚本的基本文本显示方面显著增加。 因此,为了避免性能问题,应用程序不应在显示结果并将控制权返回给用户之前处理大量文本。

使用编辑控件的复杂脚本处理

标准 Windows 编辑控件已扩展为支持多语言文本和复杂脚本。 扩展支持包括输入和显示,以及光标在字符群集上的正确移动,例如,在泰语和 Devanagari 脚本中。 有关详细信息,请参阅 编辑控件

使用丰富编辑控件的复杂脚本处理

Rich Edit 3.0 是一个更高级别的接口集合,利用 Uniscribe 将文本布局应用程序与某些脚本的复杂性隔离开来。 丰富编辑是应用程序显示复杂脚本的最简单方法,即使它们的主要用途不一定是文本布局。 Rich Edit 提供快速、通用的丰富 Unicode 多语言文本和简单纯文本编辑。 它包括广泛的消息和 COM 接口、文本编辑、格式设置、换行、简单表格布局、垂直文本布局、双向文本布局、索引和泰语支持、编辑用户界面(与 Microsoft Word 非常类似)以及文本对象模型接口。

除了 Rich Edit 接口,应用程序还可以使用 Rich Edit TextOut 函数自动分析、形状、位置和换行。 有关详细信息,请参阅 Rich Edit 控件

使用 Uniscribe 处理复杂脚本

Uniscribe 为处理涉及精细版式效果和复杂脚本的文本提供最广泛的支持。 它支持在脚本(如阿拉伯语、Devanagari 和泰语)中找到的复杂规则。 它处理从右到左编写的脚本,例如阿拉伯语和希伯来语,并支持混合脚本。 Uniscribe 还公开了可由应用程序用来控制精细版式效果的 OpenType 字体功能。 有关详细信息,请参阅 处理复杂脚本

关于 Uniscribe

处理复杂脚本