ScriptGetCMap 函数 (usp10.h)

根据 TrueType cmap 表或为旧样式字体实现的标准 cmap 表检索字符串中 Unicode 字符的字形索引。

语法

HRESULT ScriptGetCMap(
  [in]      HDC          hdc,
  [in, out] SCRIPT_CACHE *psc,
  [in]      const WCHAR  *pwcInChars,
  [in]      int          cChars,
  [in]      DWORD        dwFlags,
  [out]     WORD         *pwOutGlyphs
);

参数

[in] hdc

可选。 设备上下文的句柄。 有关详细信息,请参阅 缓存

[in, out] psc

指向标识脚本缓存 的SCRIPT_CACHE 结构的指针。

[in] pwcInChars

指向 Unicode 字符字符串的指针。

[in] cChars

pwcInChars 指示的字符串中的 Unicode 字符数。

[in] dwFlags

指定标志符号的任何特殊处理标志。 默认情况下,标志符号按逻辑顺序提供,无需特殊处理。 此参数可以具有以下值。

含义
SGCM_RTL
由 pwOutGlyphs 指示的字形数组应包含那些具有镜像等效字形的镜像字形。

[out] pwOutGlyphs

指向缓冲区的指针,函数在其中检索字形索引数组。 此缓冲区的长度应与 pwcInChars 指示的输入缓冲区的长度相同。 每个代码点映射到单个字形。

返回值

如果字体中存在所有 Unicode 码位,则返回S_OK。 如果函数不成功,则返回下面列出的非零 HRESULT 值之一。

返回值 含义
E_HANDLE 字体或操作系统不支持字形索引。
S_FALSE 某些 Unicode 码位已映射到默认字形。

注解

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

此函数可用于确定运行中所选字体支持的字符。 应用程序可以扫描检索到的字形缓冲区,查找默认字形以确定不可用的字符。 应用程序应通过调用 ScriptGetFontProperties 来确定所选字体的默认字形索引。

此函数的返回值指示是否存在任何缺失的字形。

注意 函数假定输入和输出数组中的元素之间存在 1:1 关系。 但是, 函数不支持 UTF-16 代理项对的此关系。 对于代理项对,函数不会检索补充平面字符的字形索引。 同样,函数不支持 Unicode Variation-Selector (VS) 序列,每个序列由 Unicode 图形字符组成,后跟一组变体 SELECTOR 字符,用于为该图形字符选择特定的字形表示形式。 对于 VS 序列,函数检索由 cmap 为两个字符映射的默认字形索引,而不是为 VS 序列检索特定字形的字形索引。
 
某些码位可以通过标志符号的组合以及单个字形(例如 00C9)呈现;带锐音符的拉丁文大写字母 E。 在这种情况下,如果字体支持大写 E 字形和锐字形,但不支持 00C9 的单个字形, 则 ScriptGetCMap 显示不支持 00C9。 若要确定对包含这些类型代码点的字符串的字体支持,应用程序可以调用 ScriptShape。 如果函数返回S_OK,则应用程序应检查缺少字形的输出。
重要从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_CACHE

ScriptGetFontProperties

ScriptShape

Uniscribe

Uniscribe 函数