CreateTextFormat的文档没有提及字体后备选择,但如果选择了默认(NULL = system)集合,则DirectWrite清晰地实现了字体后备。例如,如果我将Gabrieola字体中未找到的两个字形添加到DirectWrite SDK演示应用程序使用的测试字符串中,则DirectWrite会从Segoe UI Symbol字体中挑选缺失的字形。出现这种情况的基本DrawText
呼叫,还与自定义呈现(即不为字体回退没有自定义),如下图所示(唯一的改变是测试字符串):DirectWrite(CreateTextFormat)如何选择备用字体?
的选中标记,WITE星来来自Segoe UI Symbol,而不是来自Gabriola,即使在演示程序中仅指定了Gabriola。那么,有没有人知道如何通过DirectWrite(CreateTextFormat)选择回退字体?
更新。我看到有一个GetSystemFontFallback可以列出回退字体,但它只在Windows 8.1中可用(因为它在IDWriteFactory2中)。我想他们已经注意到API在枚举回退字体方面的差距。所以我猜在Windows 8.1之前没有办法做到这一点,但如果有人知道黑客/解决方法...
Update2。引用一个MSFT employee:
DirectWrite具有不从注册表中读取或以任何方式可配置的回退数据。然而,在Windows 8.1中,已经引入了API,允许应用程序指定自己的回退。 (它类似于用于创建复合字体定义的WPF API。)
这仍然不能准确解释硬编码算法/替换方案实际上是什么。