1

当目标字体不可用时,是什么让 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”。

4

1 回答 1

2

关于在线字体映射器的内部工作的信息似乎很少。如果这篇非常古老的文章仍然适用,那么

每次不匹配 [in font attributes] 都会受到惩罚,并且惩罚是累积的。映射器跟踪罚分最低的物理字体......

在两种不同字体具有完全相同的惩罚的情况下,被检查的第一个字体就是被选中的字体。应用程序无法控制此排序。

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

@Hans Passant:据我了解,字体回退仅在您已经将字体选择到设备上下文中然后尝试渲染一些字体不包含字形的字符时才会发生。参见例如字体链接与字体回退迈克尔·卡普兰。)

于 2013-05-28T10:07:33.587 回答