最近由于项目要使用新的GUI,涉及到microwindows 的移植,因此开始接触microwindows。
microwindows 是运行在嵌入式系统下的开源GUI项目,对linux有很好的支持。系统采用分层的设计方案以满足不同的实现需要。总体分为三层:最下面的设备驱动层、中间的图形引擎层、面向应用程序的API接口层。设备驱动部分提供了屏幕、鼠标/触摸屏、键盘以及其它I/O设备的实际操作,并向上提供统一接口以实现设备无关图形引擎。中间层实现了画点、画线、多边形、剪切区以及颜色模式设置等功能。
下载源代码包后,解压,然后进入/microwindows-0.91/src 运行./xconfigure,出现相应的图形选项,当然也可以直接编辑config。配置好后make,make install.make install会自动把库文件拷贝到linux的lib目录下。
下面重点介绍microwindows对中文的支持。micorowidows-0.91支持中文。 中文不同于ASCII字符,一个中文需要2个字节来编码,通用的中文编码标准有GB2312、GBK、GB18030、BIG5(繁体),在嵌入式系统中我们采用GB2312标准,也是国家标准。为了区别中文与基本的ASCII字符,汉字的编码的每个字,最高位均为1,而0-127之间的编码用于基本的 ASCII字符,因此我们可以同时显示中文与英文,而不会出现问题。而不同的多字节编码之间是不容易区分的,比如中文与日文,还有拉丁文,因此一些系统在进行处理的时候,会把不同的编码转成为通用的UniCode编码,Unicode编码规则是每个字符采用2字节或4字节进行编码,基本包括了世界上所有字符的编码。
为了支持中文显示,先要下载中文字库包,解压后拷贝fonts/chinese和fonts/truetype到你的代码生成可执行文件的哪个目录下。
1)修改config文件如下:
HAVE-HZK-SUPPORT = Y
HZK-FONT-DIR = "/fonts/chinese"
HAVE_GB2312_SUPPORT = Y
2)修改应用程序,住输出中文的前后,加入如下语句:
GR_GC_ID gc;
GR_FONT_ID font;
gc = GrNewGC();
font = GrCreateFont("HZKFONT", 12, NULL);
GrSetGCFont(gc, font);
.....
// 这里调用DrawTextO进行输出,
.....
GrDestroyGC(gc);
GrFlush();
现在就可以显示中文字体了。
microwindows 是运行在嵌入式系统下的开源GUI项目,对linux有很好的支持。系统采用分层的设计方案以满足不同的实现需要。总体分为三层:最下面的设备驱动层、中间的图形引擎层、面向应用程序的API接口层。设备驱动部分提供了屏幕、鼠标/触摸屏、键盘以及其它I/O设备的实际操作,并向上提供统一接口以实现设备无关图形引擎。中间层实现了画点、画线、多边形、剪切区以及颜色模式设置等功能。
下载源代码包后,解压,然后进入/microwindows-0.91/src 运行./xconfigure,出现相应的图形选项,当然也可以直接编辑config。配置好后make,make install.make install会自动把库文件拷贝到linux的lib目录下。
下面重点介绍microwindows对中文的支持。micorowidows-0.91支持中文。 中文不同于ASCII字符,一个中文需要2个字节来编码,通用的中文编码标准有GB2312、GBK、GB18030、BIG5(繁体),在嵌入式系统中我们采用GB2312标准,也是国家标准。为了区别中文与基本的ASCII字符,汉字的编码的每个字,最高位均为1,而0-127之间的编码用于基本的 ASCII字符,因此我们可以同时显示中文与英文,而不会出现问题。而不同的多字节编码之间是不容易区分的,比如中文与日文,还有拉丁文,因此一些系统在进行处理的时候,会把不同的编码转成为通用的UniCode编码,Unicode编码规则是每个字符采用2字节或4字节进行编码,基本包括了世界上所有字符的编码。
为了支持中文显示,先要下载中文字库包,解压后拷贝fonts/chinese和fonts/truetype到你的代码生成可执行文件的哪个目录下。
1)修改config文件如下:
HAVE-HZK-SUPPORT = Y
HZK-FONT-DIR = "/fonts/chinese"
HAVE_GB2312_SUPPORT = Y
2)修改应用程序,住输出中文的前后,加入如下语句:
GR_GC_ID gc;
GR_FONT_ID font;
gc = GrNewGC();
font = GrCreateFont("HZKFONT", 12, NULL);
GrSetGCFont(gc, font);
.....
// 这里调用DrawTextO进行输出,
.....
GrDestroyGC(gc);
GrFlush();
现在就可以显示中文字体了。