Windows中的字体映射关系
从软件开发的角度,研究如何自定义Windows的系统字体。
在Windows程序开发中经常使用CreateFont创建指定的字体,其中一个参数"lpszFace"指定了字体名称。
那么系统是如何加载这个字体的?
首先会从注册表中查找:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
这里列出了系统中已经安装的字体信息,以及该字体对应的字体文件名(默认路径是C:\windows\fonts)。
如果找到了,则加载对应的字体到内存,用作文字输出。
如果没找到呢?
系统还会寻找:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
这里定义的是复用字体,如果系统中没有安装指定的字体,但是可以在这里添加一个表项,指向系统中已有的字体。
如果还是没有找到呢?
那么CreateFont函数可能会返回失败,文字输出可能会使用一个叫做“System, 16”的字体代替。
在研究注册表的时候,还有一个表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
这里定义的是字体链表,作用是当我加载的字体中没有要显示的文字的时候,就会从这里找到对应字体的备选字体文件。
从备选字体中加载要显示的文字。
所以如果要安全地去掉“微软雅黑”字体的方法就是:
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts中删除微软雅黑
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes中设置微软雅黑的别名
3.重启电脑
4.删除C:\Windows\Fonts\msyh.ttf