VxWorks汉字显示解决方案
通过如uglFontFindString(fontDrvId,“familyName=Song;pixelSize=16”&systemFontDef);的调用定位点阵描述结构;
通过如fontSystem=uglFontCreate(fontDrvId,&systemFontDef));的调用绑接点阵和点阵驱动,并标识为fontSystem;
如此重复创建多个字符集的点阵标识。
③通过如:uglFontSet(gc,fontSystem);的调用设置当前字符集;
通过如uglTextDrawW(gc,iX,iY,iLength,caString);的调用在iX,iY的位置显示caString里的字码。
可见,只要开发者根据上述的存储结构开发出对应的字符点阵,然后把点阵描述结构加入到uglBMFFontData,便可以用系统的函数使用这些点阵了。在Dos/Windosw、Linux系统下一些应用程序,可以把操作系统的点阵导出为C文件或数组,把这些导出的文件加以调整,就可以得到VxWorks系统支持的格式。
5 Zinc对汉字的支持
只要WindML的汉字支持做成功,则可以按如下方法使Zinc支持汉字:
WIND_BASE/target/src/zinc/generic/i_ugldsp.cpp文件是WindML与Zic的接口文件,在ZafScreenDisplay::ZafScreenDisplay函数里使用上述的函数定义了Zinc要使用的字符集。把这些字符集改成汉字字符集,并且把Zinc配置成支持UNICODE的方式重新编译,则Zinc就自然支持汉字显示了。
6 注意事项和总结
在使用过程中,还要注意几个问题。
①Tornado对汉字的编译,如果把汉字定义为如short ca[]={'董',0x00}(把单个汉字定义在单引号),则编译生成的目标码是正序的国标码;如果定义为“董”(双引号定义出的汉字字符串),则编译生成的目标码是反序的国标码。这样,就必须约定一种定义以根据该约定产生的国标码来构建字符点阵表(以根据该约定产生的国标码来构建字符点阵表(需要改变表里面的字码顺序)。
②如果使用双引导定义汉字字符中,要注意该串数据是以一个字节0结束,使用uglTextDrawW要求是以字为单位,所以,需要在该字节串结尾补一个0("000"即可)。
③有些字库表的字码是UNICODE的编码,尤其是使用一些操作系统的点阵导出程序生成的字库表。UNICODE编码与国际码有一一对应关系,可以把这样的字库表转换过来或者在程序里适当位置把要显示的内容转化为UNICODE再显示。
本文就嵌入式操作系统上作用汉字这一热门论题,论述了VxWorks上的图形实现方案、汉字开发方案,图形组件WindML对多字节码的支持特性,并在论述特性的同时,列举了宋体16点阵的框架,帮助汉字开发者理解点阵实现的细节。在论述WindML汉字操作函数之后,提出了在Zinc层实现汉字显示的方法和编程时注意事项。这套方案已经成功地实现,并在上海大众的导航产品、南京电力的电力控制产品等项目上获得成功的应用。文章的作者都在VxWorks操作系统上做了多年的开发和支持,感兴趣或需要帮助的朋友可通过donleo@china.com.cn与我们联系。
《VxWorks汉字显示解决方案(第5页)》