|
特别说明:pdf版60期emWin教程已经发布:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=2932
armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1830
本期主要讲文本的显示,整体来说比较的简单,但很适合初学的兄弟看,里面有一些函数的使用
上面需要注意的问题。
本期分为五个小节:
10. 1 基本例程
10. 2 文本绘制模式
10. 3 GUI_DispStringInRectWrap函数的使用
10. 4 移植到armfly-v5开发板上面的自动换行的例子
10. 5 实验总结
10. 1 基本例程
控制字符是指字符代码小于32的字符。控制字符被定义为ASCII代码的一部分。emWin忽略了下
表所列字符以外的所有控制字符:
控制字符LF的用法在字符串中非常方便。换行符可以作为字符串的一部分,这样,字符串就可以拆分为
多行,且只需调用一个例程就能显示。
下面在emWin5.22的模拟器上面实现一下,下面的这个程序,主要是通过\n实现换行,模拟器的使
用方法,看前面几期就会了。
void MainTask(void) { GUI_Init();
/* 对于初学者,这个地方一定要注意,这里只是设置背景颜色,也就是给变量赋值了一下 */
GUI_SetBkColor(GUI_BLUE);
/* 要实现背景颜色的改变,必须的执行下面这句 */
GUI_Clear();
GUI_SetFont(&GUI_Font8x16);
/* 这里调用字符串显示 并实现一下换行 */
GUI_DispString("iType not\navailable");
while (1)
{ GUI_Delay(1000);
}
}
实验截图
函数GUI_DispStringAt()
GUI_DispStringHCenterAt()
GUI_DispStringInRect() 平时使用的也比较多,有兴趣的可以在模拟器上面练练手。
10.2 文本绘制模式
通常,在所选窗口的当前文本位置,使用所选字体以正常文本模式写入文本。正常文本模式意思是指文本覆盖
已经显示的任何内容,在这种情况下,字符掩码中设定的位元在屏幕上被设定。在这种模式下,活动位元使用前景
颜色写入,而非活动位元用背景颜色写入。但在某些情况下,需要更改这种默认模式。emWin为此提供了四种可以
组合使用的标记 (一种默认加三种修改标记):
正常文本
通过指定GUI_TEXTMODE_NORMAL或0,可以正常显示文本。
反转文本
通过指定GUI_TEXTMODE_REV,可以反转显示文本。通常的黑底白字显示方式将变为白底黑字显示。
透明文本
通过指定GUI_TEXTMODE_TRANS,可以显示为透明文本。透明文本表示文本写在屏幕上已经可见的
内容之上。不同之处在于,屏幕上原有的内容仍然可见,而在正常文本中,背景会替换为当前选择的背景色。
异或文本
通过指定GUI_TEXTMODE_XOR,可以使用异或模式显示文本。通常情况下,用白色绘制的 (实际字符)
显示是反相的。如果背景色是黑色,效果与默认模式 (正常文本)是一样的。如果背景是白色,输出与
转文本一样。如果使用彩色,反相的像素由下式计算:
新像素颜色=颜色的值–实际像素颜色–1。
透明反转文本
通过指定GUI_TEXTMODE_TRANS | GUI_TEXTMODE_REV,可以显示为透明反转文本。与透明文本一样,
它不会覆盖背景,而且和反转文本一样,该文本会反转显示。
其他信息
请注意,还可以使用缩写形式:例如,GUI_TM_NORMAL
示例
显示正常、反转、透明、异或以及透明反转文本,通过下面这个例子就可以详细的了解这几个模式的
区别了:
void MainTask(void) { GUI_Init();
/* 设置字体 */
GUI_SetFont(&GUI_Font8x16);
/* 设置背景颜色 */
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
/* 设置画笔的粗细以及颜色,只有矢量函数才能设置Size*/
GUI_SetPenSize(10);
GUI_SetColor(GUI_RED);
GUI_DrawLine(80, 10, 240, 90);
GUI_DrawLine(80, 90, 240, 10);
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_WHITE);
/* 设置正常模式 */
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 160, 10);
/* 翻转文本 */
GUI_SetTextMode(GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_REV" , 160, 26);
/* 透明文本 */
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DispStringHCenterAt("GUI_TM_TRANS" , 160, 42);
/* 异或文本 */
GUI_SetTextMode(GUI_TM_XOR);
GUI_DispStringHCenterAt("GUI_TM_XOR" , 160, 58);
/* 设置文本模式 */
GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);
GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 74);
while (1) {
GUI_Delay(1000); }
}
这个里面还有一个函数GUI_SetTextStyle(),有兴趣的可以试试
10.3 GUI_DispStringInRectWrap函数的使用
先贴一下官方的使用说明
下面这个例子非常的好,很好的说明了三种模式的区别
#include "GUI.h"
int i;
char acText[] = "This example demonstrates text wrapping";
GUI_RECT Rect = {10, 10, 59, 59};
GUI_WRAPMODE aWm[] = {GUI_WRAPMODE_NONE,
GUI_WRAPMODE_CHAR,
GUI_WRAPMODE_WORD};
void MainTask(void) {
GUI_Init();
GUI_SetTextMode(GUI_TM_TRANS);
for (i = 0; i < 3; i++)
{
GUI_SetColor(GUI_BLUE);
GUI_FillRectEx(&Rect);
GUI_SetColor(GUI_WHITE);
GUI_DispStringInRectWrap(acText, &Rect, GUI_TA_LEFT, aWm);
Rect.x0 += 60;
Rect.x1 += 60;
}
while (1)
{
GUI_Delay(10);
}
}
实验效果截图
10.4 移植到armfly-v5开发板上面的自动换行的例子
int i;
char acText[] = "This 安富莱电子 产品和服务example 安富莱电子 demonstrates text wrapping";
GUI_RECT Rect = {10, 10, 180, 180};
GUI_WRAPMODE aWm[] = {GUI_WRAPMODE_NONE,
GUI_WRAPMODE_CHAR,
GUI_WRAPMODE_WORD};
void MainTask(void)
{
GUI_Init();
GUI_SetFont(&GUI_FontHZ16);
GUI_SetTextMode(GUI_TM_TRANS);
for (i = 0; i < 3; i++)
{
GUI_SetColor(GUI_BLUE);
GUI_FillRectEx(&Rect);
GUI_SetColor(GUI_WHITE);
GUI_DispStringInRectWrap(acText, &Rect, GUI_TA_LEFT, aWm);
Rect.x0 += 200;
Rect.x1 += 200;
}
while (1)
{
GUI_Delay(10);
}
}
实验显示效果
10.5 实验总结
整体上面来说,这一期还是比较的简单的,这里希望大家多多的联系,熟练的掌握这几个函数 |
|