国际字体枚举和选择

在 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 结构的 flags 成员中添加了 (CF_INACTIVEFONTS) 的附加标志,以允许你在字体列表中显示所有已安装的字体,这与 Windows 7 之前的 ChooseFont 行为相同。 有关 Windows 7 中 ChooseFont 函数的行为差异的详细信息,请参阅 Windows 7 应用程序质量指南中的 ChooseFont () Win32 Common Dialog。 有关 Windows 7 中的最终用户体验差异,请参阅 ChooseFont 函数和 CHOOSEFONT 结构。

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

Windows 风景功能区中的字体控件

Windows 7 引入了 Windows 风景功能区,它附带了一组针对字体选择的控件。 这些字体控件支持新的 Windows 7 字体隐藏行为。 可以使用这些字体控件仅列出显示的字体,并允许用户选择字体。

注意

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

 

EnumFontFamiliesEx

ChooseFont

CHOOSEFONT 结构

Windows 风景功能区中的字体控件

ChooseFont () Win32 通用对话框