【问题标题】:Test if a font is installed (Win32)测试是否安装了字体(Win32)
【发布时间】:2010-10-21 01:16:53
【问题描述】:

如何测试是否安装了字体?

最终,我想实现一个类似 HTML 的字体选择,即在指定例如“Verdana,Arial”,它应该选择第一个安装的字体。

This Question 为 .NET 提供了答案 - 似乎推荐的方法是创建字体,然后再计算实际使用的字体。

这是最有效的方法吗?

【问题讨论】:

    标签: c++ winapi fonts


    【解决方案1】:

    您可以使用 EnumFontFamiliesEx 枚举系统上的字体列表,或者如果您传递字体名称,您可以枚举该系列的字体。

    【讨论】:

    • 你知道 EnumFonts 等人的 DC 参数有什么意义吗? CreateFont 中不需要它。传递桌面窗口的 DC 似乎可行,但我在 MSDN 中找不到任何文档(“设备上下文句柄”除外)
    • 我怀疑这可能是因为使用打印机 dc 但我只使用过 GetDC(NULL) 并且从未尝试过其他任何东西。
    • DC 会将枚举的字体限制为设备可用的字体。如今,这并没有太大的限制。调用 CreateFont 时不需要 DC,因为 CreateFont 只是创建 LOGFONT 的内部版本并为您提供处理它的句柄。只有当您将该句柄选择到 DC 中时,才会选择并实例化实际字体。
    【解决方案2】:

    您可以尝试创建字体并查看您得到的结果(因此使用操作系统的字体名称匹配/替换)。

    或者您可以枚举已安装的字体并自己进行匹配。

    “最有效”的方式将取决于“匹配”的详细信息,并且很可能安装了多少字体。在一个安装了 50 种字体的系统上,您可能会发现性能与安装了 1000 种字体的系统有很大的不同。

    最后你只能在代表性系统上进行分析,如果你第一次接近(保持简单)结果是一个性能瓶颈。

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多