前言
最近负责的产品是一个小型网关,搭载了一块3.5寸的显示屏,需要实时显示一部分数据,还能进行参数设置,为了方便的管理多个窗口和界面的内容展示,所以这里采用了STemWin,因为使用的主控芯片是STM32F29,所以可以免费使用STemWin,开发过程中遇到了部分问题,这里记录一下,方便自己查阅,也希望可以帮助到正在看文章的你。
记录
1.Keil字符编码对中文显示的影响
在开发过程中发现中文字符显示有问题,但是中文字库都是已经转换好的,刚开始不知道是什么原因,通过与同事探讨才发现了问题所在。
原因
文件默认的字符编码格式与字库索引的编码格式不同导致的。
大家应该知道我们平常使用Keil的时候中文注释会出现乱码,一个中文字符会被拆分成两个字符,因为这是使用的 Encode in ANSI 编码格式,我们来看一下 Encode in ANSI 编码格式的百科:
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
可以看出,由于一个中文符号被拆分成两个字节来保存,所以就导致假如你用中文注释的时候,会因为删除中间的一个字符导致后面的字符全乱码,大家可以自己尝试下。正式由于这个原因,导致我想要在显示屏上显示中文字符的时候没法正确索引到正确汉字的位置,从而无法显示出中文来。
解决办法
解决办法也很简单,我们只需要将字符的编码格式修改一下即可,如下图:
![fc73221ea9bf5077fc9f1f6d28e2dc64.png](https://img-blog.csdnimg.cn/img_convert/fc73221ea9bf5077fc9f1f6d28e2dc64.png)
将Encode in ANSI修改为Encode in UTF-8 without signature即可,下面是中文显示效果:
![ca199ed3d0a35a408642a9cf19895f22.png](https://img-blog.csdnimg.cn/img_convert/ca199ed3d0a35a408642a9cf19895f22.png)
不过还有几个字没有制作进字库当中去,所以没有显示,大家能猜出是哪几个字吗?
2.DialogBox窗口不支持定时器
因为想在某个子窗口上实时更新一些数据,原本以为直接用STemWin的定时器就可以搞定了,由于子窗口是通过 GUI_CreateDialogBox 函数创建的,也就是我们常说的对话框,但是居然不起作用!但是安富莱的例程也是这样用的,这就有点让我摸不到头