国际字体枚举和选择

在每个主要版本的 Windows 中,都有用于支持国际语言和脚本的字体。 有关自 Windows 2000 以来在每个 Windows 版本中添加的字体以及其支持的脚本、区域和语言,请参阅 Windows 中的脚本和字体支持

EnumFontFamiliesEx

若要枚举应用程序中的国际字体,可以使用 EnumFontFamiliesEx 函数。 EnumFontFamiliesEx 允许通过传入指向包含字号名称和字符集信息的 LOGFONT 结构的指针来枚举字体名称和字符集。 若要调用 EnumFontFamiliesEx,可以指定字号或字符集,也可以请求提供任何可用类型。 将 LOGFONT 的字样名称设置为 NULL 枚举所有字样名称。 将字符集字段设置为 DEFAULT_CHARSET 枚举所有字符集。

请注意,字符集是对应于前 Unicode 字符集的旧概念。 目前,没有用于枚举支持 Unicode 中任意脚本或字符范围的字体的机制。 由 EnumFontFamExProc 传递的 NEWTEXTMETRICEX 结构包括字体开发人员提供的 FONTSIGNATURE 结构,其中包括字体开发人员提供的更详细的声明,以及字体支持哪些 Unicode 范围。 若要更准确地确定给定字体支持的字符范围,请在设备上下文中选择字体,并调用 GetFontUnicodeRanges。 请注意,此 API 不支持 Unicode 补充平面。

ChooseFont

可以使用 ChooseFont 函数显示一个通用对话框,该对话框允许用户根据字符集选择国际字体。 可以指定三个标志之一,以便根据字符集确定在 ChooseFont 对话框中显示的字体:CF_SCRIPTSONLYCF_SELECTSCRIPTCF_NOSCRIPTSEL

CF_SCRIPTSONLY 标志指示 API 列出非符号或 OEM 的所有字符集的字体。

如果要仅显示覆盖特定字符集的字体,则需要指定标志 CF_SELECTSCRIPT。 在调用 ChooseFont之前,请初始化 LOGFONT 结构的 lfCharSet 字段。 如果只想指定字符集,请将 LOGFONT 结构的其他字段设置为 NULL。 若要让 ChooseFont 查看 logFONT 结构,还需要指定 CF_INITTOLOGFONTSTRUCT 标志。

最后,与“字体”对话框中的任何其他字段一样,可以选择显示空白脚本列表框。 如果用户突出显示了跨越多个字符集的多个不同字体,则此功能非常有用。 在这种情况下,你将使用 CF_NOSCRIPTSEL 标志调用 ChooseFont

从 Windows 7 开始,ChooseFont 实现对从字体选择列表中隐藏字体的支持。 ChooseFont 将仅列出显示的字体,并在列表框中显示字体时筛选掉隐藏字体。 添加了 ChooseFont 结构的标志成员中的其他标志(CF_INACTIVEFONTS),以便你可以在字体列表中显示所有已安装的字体,这与在 Windows 7 之前的行为 ChooseFont 相同。 有关 Windows 7 中 ChooseFont 函数的行为差异的详细信息,请参阅 Windows 7 应用程序质量指南中的 ChooseFont() Win32 常见对话框。 有关 Windows 7 中最终用户体验差异,请参阅 ChooseFont 函数和 CHOOSEFONT 结构。

请注意,字符集是对应于前 Unicode 字符集的旧概念。 目前,没有基于 Unicode 脚本或字符范围筛选字体的机制。

Windows 风景区中的字体控件

Windows 7 引入了 Windows 风景区,其中包含一组以字体选择为目标的控件。 这些字体控件支持新的 Windows 7 字体隐藏行为。 可以使用这些字体控件仅列出显示字体并允许用户选择字体。

注意

在 Windows 7 之前的任何平台上运行 Windows 风景区时,不支持隐藏字体。

 

EnumFontFamiliesEx

ChooseFont

CHOOSEFONT 结构

在 Windows 风景区字体控件

ChooseFont() Win32 常见对话