如何获得某个字体支持的字号大小情况?


比如记事本中打开font对话框,选择某个字体后右边的“大小”列表中会显示出这个字体所默认支持的大小情况,有什么办法可以获得这个数据?

VC Windows界面开发

森島はるか 12 years, 9 months ago

通过 EnumFonts 可以实现

具体可以参考一下MSDN:

  • 调用 EnumFontFamilies 使用 NULL 作为系列名称 (lpszFamily) 列出每个可用的字体系列中的一种字体。
  • 在 EnumFontFamProc 回调函数,查看 nFontType 参数。 如果 nFontType 中有 TRUETYPE_FONTTYPE 标记设置然后调用 EnumFontFamilies 具有系列名称设置为字体的类型字体名 (lfFaceName ENUMLOGFONT 结构的)。为每个样式的名称一次调用回调函数。此枚举是应用程序有兴趣查找具有特定样式名称 (如"大纲") 的 TrueType 字体的情况下很有用的。因为一个 TrueType 字体是连续可扩展,则没有必要枚举给定的字体磅值。应用程序可能会使用任何所需的磅值。如果应用程序列出枚举的 TrueType 字体,可以简单地选择一些具有代表性的磅值在给定范围内。建议的"的 Windows 接口: 一个应用程序设计指南"(页 159,节 8.4.1.4) 的点大小是 8、 9、 10、 11、 12、 14、 16、 18、 20、 22、 24、 26、 28、 36、 48 和 72。所有 TrueType 字体都都显示和打印机上, 可用的因此应用程序可以确保该字体将出现显示和打印机上相同。 如果 nFontType 中有 RASTER_FONTTYPE 标记设置然后调用 EnumFontFamilies 具有系列名称设置为字体的类型字体名。为每个可用的字号一次调用回调函数。可以仅在可用的点大小的倍数缩放光栅字体。缩放的光栅字体通常是因为不吸引用户,应用程序可能会选择限制自己可用的大小。因为 Microsoft Windows 版本 3.1 未定义的光栅字体的样式名称,则没有必要进行枚举的样式名称。
  • 如果该 nFontType 也有 DEVICE_FONTTYPE 标记设置,然后当前字体是光栅字体可供使用的打印机,打印机驱动程序。打印机可能已在 $ 硬件中的这些字体,或能够在必要时下载。使用此类字体的应用程序应该知道类似光栅字体可能无法显示设备上的可用。反之,也是这样。如果未设置 DEVICE_FONTTYPE 标志,则应用程序应该知道一种相似的字体可能不可用的打印机上。为设备字体列出字体软件包如 Adobe 类型管理器 (ATM) 所生成的字体。 如果 nFontType 有既不能在 TRUETYPE_FONTTYPE 也不能设置的 RASTER_FONTTYPE 标记,然后枚举的字体为矢量字体。此外矢量字体是连续可扩展,因此它们不必非要枚举的点大小的。因为 Windows 3.1 不支持矢量字体的样式名称,则没有必要以枚举它们的样式名称。设备 (如不能支持光栅字体的绘图仪通常使用矢量字体。这些字体通常光栅设备上具有较差的外观,如此多的应用程序可避免它们。
level0 answered 12 years, 9 months ago

Your Answer