是什么让Windows在目标字体不可用时选择某种字体而不是另一种字体

时间:2013-05-27 13:13:22

标签: winapi fonts mfc

当目标字体不可用时,是什么让Windows选择某种字体而不是另一种字体?

我正在使用以下代码来创建某种字体。

somefont.CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0,
                            DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
                            CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                            DEFAULT_PITCH|FF_SWISS, "Segoe UI");

现在,如果Segoe UI不可用(如在Windows XP上),字体映射器会自动选择“Arial”作为后退。 这实际上是我想要的,但是什么使Windows XP选择“Arial”而不是其他一些无衬线字体,如“Microsoft Sans Serif”。​​

1 个答案:

答案 0 :(得分:2)

关于字体映射器在线内部工作的信息似乎很少。如果this very old article仍适用,则

  

评估每个不匹配[字体属性]的惩罚,并且惩罚是累积的。映射器跟踪具有最低惩罚分数的物理字体......

  

如果两种不同的字体具有完全相同的惩罚,则检查的第一种字体是所选的字体。应用程序无法控制此顺序。

从那里我想如果“Segoe UI”不存在,你永远不能确定选择了哪个FF_SWISS字体。尽管安装名称以“aa”开头的瑞士字体以查看检查顺序是否大致按字母顺序排列,这将是有益的。

@Hans Passant:据我所知,只有当你已经在设备上下文中选择了一个字体,然后尝试渲染一些字体不包含字形的字符时,才会发生字体后退。请参阅例如{{迈克尔·卡普兰(Michael Kaplan)。}

相关问题