Emwin模拟器控件(text、radio、multiedi、dropdown等)显示中文(移植GUI到32单片机上也可以正常显示)
我这个办法可以在pc模拟器上显示中文,同时界面做好了中文显示之后,要移植到32上面无需重新制在32上显示中文的字库,移植成功后可以直接在屏幕上显示中文,和pc的一样显示,
当然,也有缺点,就是如果想要添加新的字,那就要重新制作这个文件库。两个都要,所以这是比较麻烦的
1.准备工具:
平台:VS(本人VS2013)
1.Unicode编码的txt文本文件(win10是“UTF-16 LE”)
2.UTF-8 编码的txt文本文件(win10是“带BOM的UT”)
内容可以自己定,但是两个内容要一致
3.GUIbuilder 软件
4.emWin Font Converter
5.U2C
没有这些工具的可以自己去Emwin官网下载(需注册)
首先第一步,先用GUIbuilder先生成一个界面,包含好几个控件
生成代码后先加入到VS工程里面
2.生成字库
1.先打开准备好的emWin Font Converter按照以下步骤操作
选择standard ok
选自己需要的字体、大小、类型
这里我自己选择宋体 ,粗体,18x18大小
选择 Pixels
然后禁用所有字符,当然你可以不禁用,但是生成的c文件就是全字库,很大
然后使能一部分字符范围是0-7F 就是包含日常使用的数字、标点符号、字母等。
范围:0-7F
然后读取你自己刚刚生成的字库(Unicode编码的txt文本文件)
然后另存为,名字最好是英文。
2.用U2C这个软件把UTF8编码的txt文件转化成c文件,名字和之前的一样。
生成c文件
然后打开这个txt文本和对应的c文本,如图
然后对生成的c文件进行处理,左右对应标上标注
用const char XXX []= 给他命名,
好了字库的制作到这里就算完成了,接下来就要把c字库添加到vs工程里面了
3.添加字库到工程里
添加之前制作好的界面c文件
添加好了之后先把工程调好能够模拟器运行
然后打开字库的c文件,很明显可以看到字了,就是我们刚刚设置的
然后把这句
extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFront18;//每个文件因为命名不同,这句话都有所不同
复制粘贴到界面的c文件
并且把刚刚转换好的UTF8的c文件里的复制过来
extern GUI_CONST_STORAGE GUI_FONT GUI_FontSongFront18;
const char time[] = "\xe6\x97\xb6\xe9\x97\xb4";//时间
const char check[] = "\xe5\x8b\xbe";//勾
const char Chinese[] = "\xe4\xb8\xad\xe6\x96\x87";//中文
const char English[] = "\xe8\x8b\xb1\xe8\xaf\xad";//英语
const char choose[] = "\xe8\xaf\xad\xe8\xa8\x80\xe9\x80\x89\xe6\x8b\xa9";//语言选择
const char page[] = "\xe9\xa1\xb5\xe9\x9d\xa2";//页面
const char CSDN[] = "\xe6\x88\x91\xe7\x9a\x84""CSDN\xe5\x9c\xb0\xe5\x9d\x80\xef\xbc\x9a";//我的CSDN地址
const char so[] = "\xe5\xa5\xbd\xe9\x95\xbf\xe7\x9a\x84\xe4\xb8\x80\xe5\x8f\xa5\xe8\xaf\x9d";//好长的一句话
然后接下来就是替换了
我这里直接用vs里的代码替换全部替换掉
GUI_FontSongFront18
替换的字库需要加& 取址
替换好了,接下里就是你想让哪一个控件显示哪些中文,就自己还,比如
hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
DROPDOWN_SetFont(hItem, &GUI_FontSongFront18);
DROPDOWN_AddString(hItem, Chinese);
DROPDOWN_AddString(hItem, English);
//
// Initialization of '废话'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
TEXT_SetFont(hItem, &GUI_FontSongFront18);
TEXT_SetText(hItem, so);
//
// Initialization of 'Multiedit'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
MULTIEDIT_SetFont(hItem, &GUI_FontSongFront18);
MULTIEDIT_SetText(hItem, CSDN);
//
// Initialization of '语言选择'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_0);
RADIO_SetFont(hItem, &GUI_FontSongFront18);
RADIO_SetText(hItem, Chinese, 0);
RADIO_SetText(hItem, English, 1);
4.大功告成
English。CSDN这些我都已经定义好了
好了,直接上最终结果图了
下周看看有没有空,有空顺便把移植到32上,然后显示给你们看