reactos操作系统实现(187)

随着全球化的发展,开发软件都是面向多语言的环境。目前大多数程序都是采用不同字体来显示不同语言的办法,那么有没有一种更好的办法,一种字体就可以解决全球语言的显示呢?答案肯定的,它就是采用逻辑字体MS Shell DlgMS Shell Dlg2。比如开发应用程序时,就看到在资源里可以设置MS Shell DlgMS Shell Dlg2作为字体,并且可以设置不同的语言标识号,这样一个应用程序里就可以包括N种语言的资源,当这个应用程序运行在不同本地化设置地区时,操作系统就可以根据当前语言标识号去查找应用程序里的资源,如果找到一致的语言标识时就可以使用这种资源来显示。这时操作系统,就会使用注册表里标记MS Shell DlgMS Shell Dlg2相对应的字体文件作为应用程序里的文字显示出来。ReactOS里就是使用这种方式来显示中文界面的。可以看到ReactOS注册表里如下:

70 [Font.CJK.Reg]

71 HKLM,"SOFTWARE/Microsoft/Windows NT/CurrentVersion/SysFontSubstitutes","Arial",0x00000000,"Liberation Sans"

72 HKLM,"Courier","FreeMono"

73 HKLM,"Courier New","FreeMono"

74 HKLM,"Times New Roman","Liberation Serif"

75 HKLM,"Tahoma","Droid Sans Fallback"

76 HKLM,"MS Sans Serif","Tahoma"

77 HKLM,"MS Shell Dlg","Droid Sans Fallback"

78 HKLM,"MS Shell Dlg 2","Droid Sans Fallback"

79 HKLM,"MS UI Gothic","Droid Sans Fallback"

80 HKLM,"MS UI Gothic 2","Droid Sans Fallback"

81 HKLM,"Helv","Tahoma"

在这里设置的字体为Droid Sans Fallback,是否很眼熟呢?是的,它就是Googleandroid字体,在小小的3M大小的文件包括CJK基本的字体显示,缺省的字在文泉驿里也添加了不少,如果要显示多的字,就需要替换为它了。当在ReactOS编译过程制作安装包时,就会从reactos/boot/bootdata/packages/reactos.dff里拷贝字体到ISO文件里。在安装时可以选择这种字体,就是修改下面这段代码

62 MUI_SUBFONT CJKFonts[] =

63 {

64 { L"Arial", L"Liberation Sans" },

65 { L"Courier", L"FreeMono" },

66 { L"Courier New",

67 { L"Times New Roman",L"Liberation Serif" },

68 { L"Tahoma", L"Droid Sans Fallback" },

69 { L"MS Sans Serif", L"Tahoma" },

70 { L"MS Shell Dlg",

71 { L"MS Shell Dlg 2",

72 { L"MS UI Gothic",

73 { L"MS UI Gothic 2",

74 { L"Helv",

75 { NULL,NULL }

76 };

168 {L"00000404",L"950", L"950",L"10008",L"Chinese (Taiwan)", L"886",enUSPages,enUSErrorEntries,enUsstrings,CJKFonts, zhTWLayouts },

169 {L"00000804",L"936", L"936",L"Chinese (PRC)", L"86", enUSPages, zhCNLayouts },

170 {L"00000C04",L"Chinese (Hong Kong S.A.R.)", L"1", zhHKLayouts },

通过上面的修改,就可以让 ReactOS 支持 CJK 的字体显示了。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...