为Windows 3.1制作新的系统字体

对于Windows 3.1而言,你是否看腻了大号的字体?特别是在低分辨率下,大号字体意味着更大的窗口,应用程序窗口显示不完整都是常事。那么有没有办法缩小系统字体,以更好地显示呢?

有!可以通过制作新的系统字体来解决,原版的系统字体是VGASYS.FON,虽然大小只有几KB,但包含了绝大多数ASCII字符以及相应的文字编码,由于中文Windows 3.1的点阵字体只有宋体,因此为了更好的显示效果,这里只在宋体的基础上制作新的系统字体。本文主要介绍两种解决方案(也是我目前所知的两种方法了)

方法一:SYSFON(最简单)

这款工具诞生于1993年年初,由外国人Peter Karrer开发,属于免费软件,可以快速制作用于Windows 3.0/3.1的系统字体。优点是操作简便,缺点是生成的系统字体在中文3.1下面部分文字(尤其是应用程序中加粗的字体)可能会显示不正常。

首先在Select Font选项中选取宋体,字形选择常规,字号可以选取9、10pt两种(原版VGASYS.FON是12pt的System字体),字符集可以默认GB2312(就是软件会提示非ANSI字符),也可以选择西欧语言,这些都不影响系统字体的正常显示。之所以可以选择9pt和10pt,一个很重要的原因是中文Windows 3.1有这两种字号的点阵字体,分别为SIMSUN12.FON和SIMSUN13.FON(前者系统不自带但大多数MS软件会附带,后者3.2版系统自带)。选取完毕后另存为.FON格式,并将该字体文件复制到C:\WINDOWS\SYSTEM目录中,然后在Windows 3.1的SYSTEM.INI中的“fonts.fon=”后面填入新制作的系统字体文件名。

方法二:FontEdit+Windows 3.1 DDKE组件(稍复杂)

第二种方法是MS官方制作系统字体的常规方法,利用官方的FontEdit工具和Windows 3.1 DDKE中文版附带的字体编译脚本,通过Microsoft Assembler汇编以及Microsoft C编程软件制作。

在当年这些工具实际使用时,需要安装Microsoft Assembler、Microsoft C/C++、Windows 3.1 SDK+中文SDKE+DDK+中文DDKE才行,实际上只要有编译器必需组件#include依赖的头文件,以及字体编译脚本就够了,所以我特地制作了一个最简包以便直接编译。

选取已有.FNT字体文件
编辑.FNT字体文件

FontEdit原本是Windows 3.x SDK附带的字体编辑工具,需要的字体格式为.FNT,而且只能在已有字体文件的基础上进行绘制修改。后来有大佬制作了32位版的FontEdit工具,并在此基础上添加了导入功能,可以直接通过系统已安装字体来创建.FNT,大大方便了字体的制作。当然,还是需要在已有字体文件的基础上进行修改调整才行。

改良版FontEdit新增的导入字体功能

首先我们需要有一个现成的.FNT文件,然后选择File→New…,并选定想要修改的.FNT文件,然后选取File→Import…选择想要的字体,这里还是建议选择宋体,字形选择常规,字号可以选择9pt和10pt,字符集一定要选择中文GB2312,选取完毕后点击确定,然后弹出字体具体选项,可以发现Character Set为134,这一部分最好不要修改,否则有可能生成的字体文件会无法正常显示中文,其它选项可以维持默认,然后点击OK。

字体具体选项

选好字体后,可以对字体头部信息以及大小进行修改,也可以直接修改具体字符。修改完毕后保存.FNT文件,覆盖已有.FNT文件即可。

制作好.FNT字体文件后,接下来就是编译,这里可以使用86box或者DOSBOX模拟器执行。将下载的字体编译软件包解开,然后在C:\下创建一个WINDEV的目录,接着将压缩包里的几个文件夹一同复制到C:\WINDEV目录中,文件复制完毕后,需要在autoexec.bat里面添加如下命令:

PATH=C:\WINDEV\TOOLS;C:\WINDEV\BIN

SET INCLUDE=C:\WINDEV\INCLUDE

这两个命令很重要,否则运行编译脚本时会出错。接下来进入C:\WINDEV\CFONTS\SYSTEM\VGA,将需要编译的.FNT字体文件命名为VGASYS.FNT,然后输入NMAKE命令,编译器识别到MAKEFILE脚本后开始编译,等编译完成后,会在该目录中生成VGASYS.FON的字体文件,然后将此字体文件复制到C:\WINDOWS\SYSTEM目录并挂载到system.ini即可。

编译.FON字体的相关文件
没有报错就说明编译成功

最后看看新做的系统字体效果,可以发现,10pt下显示效果最好,不仅字号小于原版的12pt,而且窗口内容显示也非常协调,配合系统自带的10pt点阵字体,一点不输原版字体下的窗口布局(也难怪当年开发Win3.2的时候附带了SIMSUN13.FON却没带SIMSUN12.FON)。但9pt下面显示效果就不是很好了,虽然能使窗口尺寸明显缩小,但是一部分依赖System字体的应用程序会因为窗口过小而显示不正常。

基于10pt宋体的VGASYS.FON
10pt系统字体下应用程序显示效果
基于9pt宋体的VGASYS.FON,中文部分使用的SIMSUN12.FON来自Win98的MINI.CAB

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注