|
这里我主要向大家分享一下如何在EMWIN中使用中文的技巧,该方法有利也有弊。
本文分别在EMWIN5.36下的VS2010和STM32F103(MDK)环境中测试通过的,其他开发环境请自行测试
看本文章之前,最好已阅读《安富莱_STM32-V6开发板emWin教程(V2.0)》教程中关于如何用Unicode编码显示汉字的章节(主要是22章)。
本文不再详细介绍如何生成字库等技巧,主要讲解教程中没提到的技巧,
我也是新手,如果有想法,可以相互交流。
好了,进入正文。如果仔细阅读教程22章,会发现教程中关于汉字的显示方式需要将包含汉字的C文件全部转化为UTF-8编码方式,
这就使得编写程序的时候,如果有多个C文件用到汉字,必须对每一个C文件转化为UTF8格式,不仅繁琐,
而且一旦程序中需要用到文件系统时,需要用到GBK等Windows下的编码时,处理起来反而更加麻烦。
那么问题来了,有没有什么办法在不改变C文件编码的方式的情况下显示中文?
答案当然是YES,那么如何操作呢?
下面有2种方式
一、使用GUI_DispString_UC()函数
该方法的局限性在于无法在控件中使用(可能有,但我没找到),若要在控件中使用需使用第二种方法。- void MainTask(void)
- {
- GUI_Init();
- GUI_SetFont(&GUI_Fontsongti16);//字体请自行生成
- GUI_GotoXY(16, 16);//由于GUI_DispString_UC无法设置显示位置,通过该函数可以指定
- GUI_SetColor(GUI_BLUE);//设置指定的颜色,避免和背景色一致以免找不出原因
- GUI_DispString_UC(L"你好");
- while(1)
- {
- GUI_Exec();
- }
- }
复制代码 效果如图所示
二、使用GUI_UC_ConvertUC2UTF8转化- void MainTask(void)
- {
- uint8_t buf[25] = "";//缓冲区的大小必须保证容纳足够的UTF8编码,一般[color=#ff0000]1个汉字最多需要6个字节的UTF8编码而且一定要初始化为全0,否则后面会跟乱码[/color]
- GUI_Init();
- GUI_UC_SetEncodeUTF8();
- GUI_SetFont(&GUI_Fontsongti16);//字体请自行生成,在控件上显示中文,必须对每一个控件调用相应的设置字体的函数,如文本标签控件使用<WIDGET>_SetFont函数,具体查看手册
- GUI_UC_ConvertUC2UTF8(L"测试显示", 4, buf, sizeof(buf));
- GUI_SetColor(GUI_BLUE);//设置指定的颜色,避免和背景色一致以免找不出原因,若在控件中需要使用<WIDGET>SetTextColor()函数
- GUI_DispStringAt(buf, 16, 16);
- while(1)
- {
- GUI_Exec();
- }
- }
复制代码 以上两种方法虽然不需要对C文件转化编码,但是方法一使用过于局限,方法二需要增加代码量,所以有利有弊,请自行权衡利弊
本质上是利用C语言L前缀表示强制将字符串转化为UNICODE编码格式(unsigned short格式),然后利用UNICODE转UTF8函数将字符串转化为UTF8格式
最后在设备上显示出来,本质原理和C文件转码无区别 |
评分
-
查看全部评分
|