其实我是以emwin为平台进行在PC上模拟的,但是emwin与ucgui基本一样,两者唯一的区别就是一个用得好死库文件,一个给了源代码。百度了下现在用户图形界面库的不同版本,大概如下:ZlgGUI适合于低端处理器;uCGUI应用最广泛,易于移植,被大部分中低端处理器采用;openGUI的源码为汇编编写,适用于通用PC机,可在各种操作系统移植、Microwindows兼容windows。
uCGUI对CPU要求不限,底层为ANSI C编写;带有图库算法,不需要浮点算法,速度快;支持各种LCD驱动;视窗显示和管理工作。本来我是想直接在STM32上直接进行GUI设计,但是读了人家作品的源码之后发现还是要系统的学习下ucgui,因为库函数实在太多,多到不知道它是用来干嘛的,我要用的函数该怎么找,这样就给设计带来了很大的困难。值得庆幸的是,ucGUI/emwin的源码里都有VC的Demo工程,并且专门做了一系列Sample的C文件,供初学者熟悉库函数。
第一次接触ucGUI?经典的Hello World例程是必经之路!
#include "GUI.h"
void MainTask(void){
GUI_Init();
GUI_DispString("Hello World");
while(1);
}
GUI_Init()函数:原形 int GUI_Init(void);初始化emwin内部数据结构和变量,所有GUI操作前必须执行初始化操作!初始化成功返回0,出错则返回其他值。
既然有Init就应该有Exit操作:GUI_Exit();从存储器清除emwin内部数据,以便进一步调用GUI_Init()。
这里显示用到的API属于文本API,关于文本API的详细讲解请自行查阅emwin用户手册。下表列出常用文本API及其作用。
API太多,不逐个讲解,只挑选我认为较重要的跟大家浅析。
GUI_SetTextMode() :选择文本绘制模式。默认情况下在所选窗口的当前文本位置,使用所选字体以正常文本模式写入文本。正常文本模式意思是指文本覆盖已经显示的任何内容。在这种模式下,活动位元使用前景颜色写入,而非活动位元用背景颜色写入。但在很多情况下,我们不希望背景被覆盖,那样会很丑的!emWin为此提供了四种可以组合使用的标记 (一种默认加三种修改标记):
⒈正常文本:通过指定GUI_TEXTMODE_NORMAL或0,可以正常显示文本。
⒉反转文本:通过指定GUI_TEXTMODE_REV,可以反转显示文本。即黑底白字显示方式将变为白底黑字显示。
⒊透明文本:通过指定GUI_TEXTMODE_TRANS,可以显示为透明文本。透明文本表示文本写在屏幕上已经可见的内容之上。不同之处在于,屏幕上原有的内容仍 然可见,而在正常文本中,背景会替换为当前选择的背景色。
⒋异或文本:通过指定GUI_TEXTMODE_XOR,可以使用异或模式显示文本。通常情况下,用白色绘制的 (实际字符)显示是反相的。如果背景色是黑色,效果与 默认模式 (正常文本)是一样的。如果背景是白色,输出与反转文本一样。如果使用彩色,反相的像素由下式计算:新像素颜色=颜色的值–实际像素 颜色–1(其实这个我们不用管啦)。
⒌透明反转文本:通过指定GUI_TEXTMODE_TRANS | GUI_TEXTMODE_REV,可以显示为透明反转文本。与透明文本一样,它不会覆盖背景,而且和反转文本一 样,该文本会反转显示。
如此一来文本显示就自然的多。
GUI_Clear(): 清除窗口。原型 void GUI_Clear(void); 如果没有定义窗口,则当前窗口为整个显示区。在这种情况下,整个显示区都会被清除。
GUI_DispCEOL():清除当前窗口 (或显示)从当前文本位置到行末的内容,高度为当前字体高度。原型 void GUI_DispCEOL(void);举个例子来说,在屏幕上显示“Hello world”,等 待1秒钟,然后在同一位置处显示“Hi”,代替原先显示的字符串并且将多出的那些都清除就靠这个函数啦!
GUI_DispStringAt("Hello World",0,0);
GUI_Delay(1000);
GUI_DispStringAt("Hi",0,0);
GUI_DispCEOL();