我现在正在将项目的渲染引擎从 GDI 转换为 D2D。 GDI 使用“CreateFontIndirect”分配字体大小“-13”、字体系列“Segoe UI”。 D2D 使用“CreateTextFormat”分配字体大小“13”、字体系列“Segoe UI”。效果如下图:
在GDI情况下,系统在“Segoe UI”中没有找到中文字符,它会在regedit“SystemLink”中查找中文字体,在我的机器上是“雅黑”。但是在D2D情况下,系统没有找到“雅黑”,它会选择哪种中文字体来绘制,它是如何工作的?
它根据 DirectWrite 布局逻辑工作。请参阅 IDWriteTextLayout2::SetFontFallback(),如果默认配置不令人满意,您将能够提供自己的后备实现。
基本上,布局对象将调用您的自定义后备方法来将字符映射到字体,然后您可以检测要将哪些字符映射到哪种字体,对于您不关心的情况,可能会重用系统后备实现。