【发布时间】:2020-08-26 15:27:40
【问题描述】:
如何强制 Win32 GDI 字体映射器仅加载字体名称完全匹配的字体?我正在加载特定的字体,没有可行的替代品。任何替换都是不正确的。我希望 CreateFont 或 CreateFontIndirect 实际上失败。或者,也许是其他提供更多控制的 Win32 界面。即使我从文件中加载字体资源,它仍然会尝试替换。而且,似乎没有办法从资源中获取字体名称。
【问题讨论】:
-
我不知道是否有任何方法可以控制 GDI 的字体映射器,尽管您可以通过首先使用 EnumFontFamiliesEx 查找特定字体来模拟所需的行为。
-
我认为 GDI 中的设计假设是设备上下文中必须始终选择 some 字体。首先枚举并查找特定字体的建议是有道理的。您还可以使用GetFontData 检查实际选择到 DC 中的字体的“名称”表,以确认它是您想要的。
-
到目前为止,使用 GetFontData 是最好的方法——但前提是我知道人脸名称。从字体文件加载字体资源不会给我这些信息。为了尝试强制 GDI 映射器只选择请求的字体,获得最佳 LOGFONT 选项也很重要。我创建了其中一种字体,但我无法准确预测它想要什么。例如,字符集选项。这与字体根本没有真正的关系。我猜默认的 ANSI_CHARSET 是最好的选择。所有这些字体都是 Unicode 字体,但没有匹配的字符集选项。