ScriptJustify 函数 (usp10.h)

创建一个高级宽度表,以便在传递到 ScriptTextOut 函数时允许文本对齐。

语法

HRESULT ScriptJustify(
  [in]  const SCRIPT_VISATTR *psva,
  [in]  const int            *piAdvance,
  [in]  int                  cGlyphs,
  [in]  int                  iDx,
  [in]  int                  iMinKashida,
  [out] int                  *piJustify
);

参数

[in] psva

指向数组的指针,长度由 cGlyphs 指示,包含 SCRIPT_VISATTR 结构。 每个结构都包含要处理的行中字形的可视属性。

[in] piAdvance

指向前一次调用 ScriptPlace 时获取的由 cGlyphs 指示的长度的前进宽度数组的指针。

[in] cGlyphs

psvapiAdvance 指示的数组的字形计数。 此参数还指示输出参数 piJustify 的字形计数。

[in] iDx

所需更改的宽度(以像素为单位),即减小的增大。

[in] iMinKashida

要生成的 kashida 字形的最小宽度。

[out] piJustify

指向缓冲区的指针,此函数在其中检索由 cGlyphs 指示的长度的数组,其中包含对齐的前进宽度。 对齐宽度有时称为“单元格宽度”,以将它们与不合理的前进宽度区分开来。

返回值

如果成功,则返回 0。 如果函数不成功,则返回非零 HRESULT 值。 应用程序可以使用 SUCCEEDEDFAILED 宏测试返回值。

注解

有关通常调用此函数的上下文的讨论,请参阅 使用 Uniscribe 显示文本

此函数提供多语言理由的简单实现。 它确定在行上每个字形位置要做出的调整量。 它解释调用 ScriptShape 生成的SCRIPT_VISATTR数组,将 kashida 作为最高优先级。 如果没有 kashida 点可用,则函数使用字间间距。 如果没有可用的字间点,则使用字符间间距。

注意 复杂的文本格式化程序可能会通过将格式化程序特定的功能与 ScriptShapeSCRIPT_VISATTR 数组中检索的信息相结合,生成自己的增量 dx 数组。
 
应用程序应将 ScriptJustify 生成的对齐前进宽度传递到 piJustify 参数中的 ScriptTextOut

ScriptJustify 创建一个对齐数组,其中包含每个字形的更新前向宽度。 增加字形的前进宽度时,将在字形右侧呈现额外的宽度,并带有空白,或者,对于阿拉伯语文本,则呈现为 kashida。

注意 Kashida 插入出现在字形右侧,以直观方式对齐。 Microsoft Word 和 Microsoft PowerPoint 使用此概念。 kashida 放置算法中的任何更改都应伴随着特定脚本的相应 ScriptTextOut 处理程序(例如阿拉伯语 TextOut 对齐处理程序)的更改。
 
有时,应用程序会尝试处理无法对齐的字形,在这种情况下,SCRIPT_VISATTRuJustification 成员设置为SCRIPT_JUSTIFY_NONE。 在这种情况下, ScriptJustifypiAdvance 指示的输入数组复制到 piJustify 指示的输出数组,并将S_FALSE返回给应用程序。
重要从Windows 8开始:若要保持在 Windows 7 上运行的功能,使用 Uniscribe 的模块必须在其库列表中指定 gdi32.lib 之前的 Usp10.lib。
 

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 usp10.h
Library Usp10.lib
DLL Usp10.dll
可再发行组件 Windows Me/98/95 上的 Internet Explorer 5 或更高版本

另请参阅

使用 Uniscribe 显示文本

SCRIPT_VISATTR

ScriptPlace

ScriptShape

ScriptTextOut

Uniscribe

Uniscribe 函数