硬汉嵌入式论坛

 找回密码
 立即注册
查看: 38092|回复: 229
收起左侧

[emWin教程入门篇] 第十期:emWin文本显示(初学者必看)

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2013-9-27 15:14:48 | 显示全部楼层 |阅读模式
特别说明: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忽略了下
表所列字符以外的所有控制字符:
1.png

控制字符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);
  }
}
实验截图
2.png
函数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);    }
} 3.png

这个里面还有一个函数GUI_SetTextStyle(),有兴趣的可以试试
4.png
10.3  GUI_DispStringInRectWrap函数的使用
先贴一下官方的使用说明
5.png

下面这个例子非常的好,很好的说明了三种模式的区别

#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);
    }
}
实验效果截图
6.png

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);
    }
}
实验显示效果

1.png

10.5 实验总结
    整体上面来说,这一期还是比较的简单的,这里希望大家多多的联系,熟练的掌握这几个函数
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2013-9-27 15:28:47 | 显示全部楼层
硬汉出品,必属精品,顶起
回复

使用道具 举报

0

主题

12

回帖

0

积分

新手上路

积分
0
发表于 2013-9-27 15:36:18 | 显示全部楼层
正需要 顶一个
回复

使用道具 举报

41

主题

97

回帖

220

积分

高级会员

积分
220
发表于 2013-9-27 15:55:38 | 显示全部楼层
顶!
回复

使用道具 举报

36

主题

2049

回帖

2157

积分

至尊会员

积分
2157
发表于 2013-9-27 16:02:27 | 显示全部楼层
顶起[s:151] [s:151]
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2013-9-27 16:03:16 | 显示全部楼层
顶起,大力支持,现在已经陆续的更新到第十期了,希望后面再接再厉[s:151] [s:151]
天天向上
回复

使用道具 举报

91

主题

292

回帖

565

积分

金牌会员

积分
565
发表于 2013-9-27 17:04:10 | 显示全部楼层
学习学习。。。。。
按照楼主的计划,这只是入门篇,还有提高篇和实践篇的[s:150]
回复

使用道具 举报

0

主题

15

回帖

0

积分

新手上路

积分
0
发表于 2013-9-27 21:07:17 | 显示全部楼层
[s:152]
回复

使用道具 举报

2

主题

35

回帖

2

积分

新手上路

积分
2
发表于 2013-9-27 21:55:00 | 显示全部楼层
跟着学习。
回复

使用道具 举报

6

主题

9

回帖

6

积分

新手上路

积分
6
发表于 2013-9-28 14:50:05 | 显示全部楼层
学习一下
回复

使用道具 举报

12

主题

46

回帖

82

积分

初级会员

积分
82
发表于 2013-9-28 21:19:32 | 显示全部楼层
不错的帖子
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2013-9-29 11:45:48 | 显示全部楼层
[s:151] [s:151]
学习了!楼主辛苦了!!!
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

lcptw

积分
0
发表于 2013-9-30 15:36:46 | 显示全部楼层
[s:147]  [s:147]  [s:147]  [s:147]  [s:147]
lcptw
回复

使用道具 举报

0

主题

102

回帖

102

积分

初级会员

积分
102
发表于 2013-9-30 17:30:10 | 显示全部楼层
[s:151] [s:151] [s:151] [s:151]
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2013-10-1 10:21:02 | 显示全部楼层
[s:141]  [s:141]
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
QQ
发表于 2013-10-1 22:23:34 | 显示全部楼层
nnnnnnnnnnnnnnn
回复

使用道具 举报

0

主题

16

回帖

0

积分

新手上路

积分
0
发表于 2013-10-2 11:58:51 | 显示全部楼层
[s:151]
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-10-3 06:58:48 | 显示全部楼层
学习一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2013-10-4 11:40:09 | 显示全部楼层
顶一下
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2013-10-8 08:38:58 | 显示全部楼层
支持!学习下![s:150] [s:150]
回复

使用道具 举报

2

主题

135

回帖

2

积分

初级会员

积分
2
发表于 2013-10-8 09:32:08 | 显示全部楼层
[s:151] [s:151] [s:151]
回复

使用道具 举报

0

主题

10

回帖

0

积分

新手上路

积分
0
发表于 2013-10-8 14:04:57 | 显示全部楼层
继续看,很好
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2013-10-9 09:35:32 | 显示全部楼层
[s:151]  [s:151]  [s:151]  [s:151]
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
发表于 2013-10-9 12:00:50 | 显示全部楼层
学习
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
QQ
发表于 2013-10-9 17:29:01 | 显示全部楼层
走走,瞧瞧,看看
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2013-10-11 06:01:14 | 显示全部楼层
[s:150] [s:150] [s:151] [s:151]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-14 22:23:01 | 显示全部楼层
谢谢!
回复

使用道具 举报

5

主题

34

回帖

5

积分

新手上路

积分
5
发表于 2013-10-16 09:58:38 | 显示全部楼层
硬汉兄,顶一顶···
回复

使用道具 举报

79

主题

191

回帖

428

积分

高级会员

积分
428
发表于 2013-10-17 13:01:28 | 显示全部楼层
学习学习。。。。。。。。。
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2013-10-17 16:25:46 | 显示全部楼层
跟着学习。
回复

使用道具 举报

11

主题

34

回帖

67

积分

初级会员

积分
67
发表于 2013-10-19 16:21:27 | 显示全部楼层
[s:151]  [s:151]  [s:151]
回复

使用道具 举报

2

主题

34

回帖

40

积分

新手上路

积分
40
发表于 2013-10-21 20:58:03 | 显示全部楼层
支持一下楼主,顶起!
回复

使用道具 举报

0

主题

24

回帖

24

积分

新手上路

积分
24
发表于 2013-10-22 09:19:15 | 显示全部楼层
[s:151]  [s:150]  [s:149]
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-22 22:00:23 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

5

回帖

0

积分

新手上路

积分
0
发表于 2013-10-26 14:05:12 | 显示全部楼层
[s:148] [s:148]
回复

使用道具 举报

0

主题

18

回帖

0

积分

新手上路

积分
0
发表于 2013-10-28 10:41:37 | 显示全部楼层
谢谢 ,看看
回复

使用道具 举报

2

主题

27

回帖

2

积分

新手上路

积分
2
发表于 2013-10-28 14:03:48 | 显示全部楼层
[s:138]
回复

使用道具 举报

1

主题

27

回帖

30

积分

新手上路

积分
30
发表于 2013-11-2 00:34:25 | 显示全部楼层
学习。。。。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2013-11-4 15:35:57 | 显示全部楼层
硬汉出品,必属精品,顶起
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
发表于 2013-11-4 15:54:53 | 显示全部楼层
[s:151]  [s:151]  [s:151]  [s:151]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 06:58 , Processed in 0.633935 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表