加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【STemWin教程入门篇】第18章 汉字显示方式一(FontCvt的使用)

(2015-01-27 11:25:48)
标签:

ucos-iii

ucgui

emwin

fontcvt

汉字

分类: emWin
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接

第18章  汉字显示方式一(FontCvt的使用)

本期教程主要跟大家介绍官方的小工具Font Converter的使用方法,使用官方的字体转换工具,字体的显示效果要比网上那些针对UCGUI设计的字体生成工具好非常多4位抗锯齿的显示效果更是非常棒。在开头先跟大家强调两点,一个是这个字体小工具必须的使用STemWin软件包里面的,SEGGER官网下载的和MDK安装目录里面带的都是评估版,另一点是在教程中我会要求大家将要显示汉字的C文件转换为UTF-8编码,我仅仅是指的将这个显示汉字的C文件转换为UTF-8编码,这点要切记。

18.  使用FontCvt生成字库C文件的方法

18. 在开发板上面实现中文显示

18. 总结

 

18.1  使用FontCvt生成字库C文件的方法

我们先讲如何用这个软件生成部分的汉字数据,这里就以“安富莱电子”五个字进行说明。

第一步:打开选择Standard,16bit unicode

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第二步:打开选择字体和字体大小

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第三步:选择禁止所有的字符

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第四步:用unicode软件转换函数

用中文转unicode的小软件得到“安富莱电子”这5个字的unicode编码我这里在百度上面找了一个网页应用。

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第五步:在FontCvt上使能这个五个字的编码

在Font Converter软件上面使能这个五个字的unicode编码,以“安”字为例它的unicode编码是5b89,这里有两种办法找这个字。

方法一:直接的在软件里面查找,根据左边的unicode编码。

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

方法二:通过限制范围查找。

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)


第六步:然后点击保存为C文件

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

要将前面的五个字全部找到并使能以后再做保存。

18.2  在开发板上面实现中文显示

下面我们用18.1小节讲的汉字生成方式生成7中类型的字体。前三种是Standard的宋体,大小是16,36和72.

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第四种是144*144点阵的,有没有这么大的字体,需要手动往大小选项里面填写144,并选择右侧的Pixels。

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第五种选择4倍抗锯齿,144*144点阵宋体

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第六种选择4倍抗锯齿,扩展比例模式,144*144点阵宋体

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

种选择4倍抗锯齿,扩展带边框模式,144*144点阵宋体

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

MDK工程中专门的建立一个文件用存储上面生成的汉字数据:

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

主运行函数还是方面MainTask.c文件里面,主程序如下:

#include "includes.h"

#include "MainTask.h"

 

 

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFont36;(1)

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFont;

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFont72;

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFont144;

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFontA144;

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFontAEx144;

extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFontAExF144;

 

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] {

    FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},

    BUTTON_CreateIndirect,    "安富莱",            GUI_ID_BUTTON0,          350,20,420,150,0,0},

    TEXT_CreateIndirect,      "安富莱电子",        GUI_ID_TEXT0,            5, 10, 300, 33, 0,0},

    TEXT_CreateIndirect,      "安富莱电子",        GUI_ID_TEXT1,            5, 40,250, 50, 0,0},

    TEXT_CreateIndirect,      "安富莱",            GUI_ID_TEXT2,            5, 100,360, 90, 0,0},

    TEXT_CreateIndirect,      "富",                GUI_ID_TEXT3,            5, 220,144, 144, 0,0},

    TEXT_CreateIndirect,      "富",                GUI_ID_TEXT4,            205, 230,144, 144, 0,0},

    TEXT_CreateIndirect,      "富",                GUI_ID_TEXT5,            405, 230,144, 144, 0,0},

    TEXT_CreateIndirect,      "富",                GUI_ID_TEXT6,            605, 230,144, 144, 0,0}

};

 

 

void PaintDialog(WM_MESSAGE pMsg)

{

    WM_HWIN hWin pMsg->hWin;

}

 

 

void InitDialog(WM_MESSAGE pMsg)

{

    WM_HWIN hWin pMsg->hWin;

 

    //

    //FRAMEWIN

    //

    FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII);

    FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);

    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);

    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);

    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);

    FRAMEWIN_SetTitleHeight(hWin,35);

 

    //

    //GUI_ID_BUTTON0

    //

GUI_UC_SetEncodeUTF8();(2)

    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_FontSongFontA144);(3)

 

    //

    //GUI_ID_TEXT0

    //

TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT0), GUI_RED);

    TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontSongFont);

TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT1), GUI_GREEN);

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT1),&GUI_FontSongFont36);

TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT2), GUI_BLUE);

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT2),&GUI_FontSongFont72);

 

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT3),&GUI_FontSongFont144);

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT4),&GUI_FontSongFontAEx144);

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT5),&GUI_FontSongFontA144);

TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT6),&GUI_FontSongFontAExF144);

//  GUI_UC_SetEncodeNone();

}

 

 

static void _cbCallback(WM_MESSAGE pMsg) 

{

    int NCode, Id;

    WM_HWIN hWin pMsg->hWin;

    switch (pMsg->MsgId) 

    {

        case WM_PAINT:

            PaintDialog(pMsg);

            break;

        case WM_INIT_DIALOG:

            InitDialog(pMsg);

            break;

        case WM_KEY:

            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) 

            {

                case GUI_KEY_ESCAPE:

                    GUI_EndDialog(hWin, 1);

                    break;

                case GUI_KEY_ENTER:

                    GUI_EndDialog(hWin, 0);

                    break;

            }

            break;

        case WM_NOTIFY_PARENT:

            Id WM_GetId(pMsg->hWinSrc); 

            NCode pMsg->Data.v;        

            switch (Id) 

            {

                case GUI_ID_OK:

                    if(NCode==WM_NOTIFICATION_RELEASED)

                        GUI_EndDialog(hWin, 0);

                    break;

                case GUI_ID_CANCEL:

                    if(NCode==WM_NOTIFICATION_RELEASED)

                        GUI_EndDialog(hWin, 0);

                    break;

 

            }

            break;

        default:

            WM_DefaultProc(pMsg);

    }

}

 

 

void MainTask(void) 

    GUI_Init();

    WM_SetDesktopColor(GUI_WHITE);       

    WM_SetCreateFlags(WM_CF_MEMDEV);     

PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);

FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);

PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);

BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);

CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);

DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);

SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);

SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);

HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);

RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);

    GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

 

while(1)

{

GUI_Delay(10);

}

}

1. 通过extern声明要调用的字体。

2. 使能UTF-8解码格式。

3. 使用相关的汉字字体。

4. 运行程序前,一定要保证这个MainTask.c文件的编码格式是UTF-8。有时候经过复制粘贴,网络上传和下载等原因,编码格式不再是UTF-8了。修改编码格式的方法很简单:

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

实际显示效果如下,显示效果还是非常棒的,特别是抗锯齿字体。

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

特别注意,如果使用的是800*480分辨率的屏可以完成显示出来,如果是小于这个分辨率的屏只能显示出一部分,大家可以按照上面的设计方法做一个适合自己屏大小的显示或者直接拖动这个对话框即可。

18.3  使用FontCvt生成字库C文件的简单方法

前面18.1小节介绍的方面有点麻烦,这里介绍一种简单的方法。

第一步:建立txt文件,并写入汉字

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第二步:另存为unicode编码格式

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第三步:打开FontCvt软件并设置显示字体

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第四步:选择禁止所有的字符

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第五步:读取前面的txt文件

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

第六步:然后点击保存为C文件

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

【STemWin教程入门篇】第18章 <wbr>汉字显示方式一(FontCvt的使用)

通过这种方式生成的C文件就非常容易了。

18.4  总结

本期教程就为大家讲这么多,有兴趣的可以尝试一下其它字体的显示效果。如果大家使用的是IAR的话,现在IAR6.7及其以上的版本可以直接设置UTF-8编码,由于开发板配套的工程统一使用的是IAR6.3,但是IAR6.3按照本期教程的做法会出现乱码,所以没有提供IAR版本的工程代码。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有