Wince 5.0英文版ROM上显示中文文本文件

来源:互联网 发布:python jar包 编辑:程序博客网 时间:2024/06/05 18:49

Windows CE 5.0的中文ROM通常比英文的ROM要大10多兆. 这样如果不使用multi-bin的话,启动时间就会增加很多. 但是英文版的ROM上显示其他语言的文字又是一个问题,这里介绍一种方便实用的方法,解决这个问题. 这里就以显示一个中文文本文件的程序为例. 首先解决中文字体的问题. 由于我们使用的是英文ROM,所以中文字体文件只能存放在外部ROM上了,这里以外部的SD卡为例. 假设SD卡映射到目录//SDMMC. 那么接下来要做两件事情.

1) 将PC上/wince500/public/common/oak/files/simsun.ttc文件拷贝到SD卡根目录下面。

2)修改注册表文件,可以修改platform.reg,也可以修改project.reg.增加下面的内容

 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontPath]

"FontPath"=//SDMMC

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SystemLink]

"Tahoma"=//NAND FLash//simsun.ttc,NSimSun

"Courier New"=//NAND FLash//simsun.ttc,NSimSun

"Arial"=//NAND FLash//simsun.ttc,NSimSun

"Times New Roman"=//NAND FLash//simsun.ttc,NSimSun

"Symbol"=//NAND FLash//simsun.ttc,NSimSun

修改完注册表,重新makeimg之后,将新的ROM烧写上去,就可以直接显示中文了。

 

其次解决代码页的问题. 通常在windows平台上建立的中文文本文件,默认都是以GB2312编码,也就是常说的内码进行编码的。这样的文件中,中文字符是两个字节表示,英文是一个字节表示。而windows CE,众所周知,默认的是unicode编码方式,所有的字符都是双字节的编码。上一段落中提到的直接显示中文,也是现实unicode编码的中文字符串。所以这里需要将GB2312 编码的字符串转换为unicode编码的字符串。通常有两种方式选择。一种是标准C下面的转换函数。

1) mbstowcs: ANSI转换到Unicode wcstombs:Unicode转换到ANSI. 这种方式需要自行设置Locale

2) MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));

 

WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); 这种方式显示中文的时候,将CP_ACP直接写成936,936是简体中文的代码页。 关于这两种方式的函数说明,可以参考相关文档。 另外,默认定制的英文版ROM是不包含中文代码页的。需要在定制的时候进行下面一些特殊的设置。

 a)platform->settings->locale 在该设置向导下, Locales:除已有的英文外,选择所有中文. Default language: 英语 codepages:437 936 850等需要的代码页

b) 定制OS的时候 选择core os->international->Locale Services-> National Language Support(NLS) 选择core os->international->Locale Specific Support-> Chinese(Simplified)-> Fonts->GB18030 Data Converter

 

设置好a),b)之后,重新编译OS,将会发现/WINCE500/PBWorkspaces/XXXXX/WINCE500/POLLUX_ARMV4I/OAK/files目录下面多了一个文件:nlscpg.txt,而且,原来的nlscfg.inf中也增加了几条内容. 我们按照windows ce 5.0帮助中的提示修改一下nlscpg.txt. You can enable a code page that is not the default code page for a locale. To enable an addition code page on an OS design Create the Nlscpg.txt file in the %_WINCEROOT%/Public/Project/WINCE500/Platform/Oak/Files directory. Insert the code page number. You can insert any of the following code pages: 20000, 20001, 20002, 20003, 20004, 20005, 20127, 20261, 20269, 20866, 21027, 21866, 28591, 28592, 28593, 28594, 28595, 28596, 28597, 28598, 28599, 29001, 708, 860, 861, 863, 864, 865, 869 If necessary, you can add any of the code pages identified in the %_WINCEROOT%/Public/Common/Oak/Files/Codepage.txt file. When adding code page numbers to the Nlscpg.txt file, separate each number with a space. Each line must end with a carriage return (). ==============nlscpg.txt 437 936 950 ===============

 

c) makeimg :修改好之后直接makeimg.这样得到的image就是包含了936和950代码页的映像了. 至此所有问题解决了.就可以很容易的显示中文文本文件了.

原创粉丝点击