加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【STemWin教程入门篇】第6章 STemWin文本显示

(2015-01-09 14:31:00)
标签:

ucos-iii

ucgui

emwin

dsp

文本

分类: emWin

特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接

第6章       STemWin文本显示

  本期主要讲文本的显示,整体来说比较的简单,但很适合初学者看,有些文本函数在使用上要特别注意,教程中会给大家详细的讲解。

6. 1  简单文本显示

6. 2  文本绘制模式

6. 3  GUI_DispStringInRectWrap函数的使用

6. 4  开发板上面实现自动换行的例子

6. 5  总结

6.1  简单文本显示

讲解简单的文本显示前得说下控制字符,因为在使用STemwin来做一个文本阅读器时,了解这个很重要。控制字符是指字符代码小于32的字符。控制字符被定义为ASCII代码的一部分。emWin忽略了下表所列字符以外的所有控制字符:

字符代码

ASCII

C

描述

10

LF

\n

换行。

当前文本位置改变至下一行的开始。默认为:X = 0

Y + =字体-距离 (单位:像素)(如例程GUI_GetFontDistY()计算得出)

13

CR

\r

回车。

当前文本位置改变至当前行的开始。默认为:X = 0

        控制字符LF的用法在字符串中非常方便。换行符可以作为字符串的一部分,这样,字符串就可以拆分为
多行,且只需调用一个例程就能显示。

下面在emWin5.24的模拟器上面实现一下,下面的这个程序,主要是通过\n实现换行,模拟器的使用方法,看前面几期就会了。

void MainTask(void)

     GUI_Init();1

      

     GUI_SetBkColor(GUI_BLUE);

      

     GUI_Clear();

     GUI_SetFont(&GUI_Font8x16); 

    

     GUI_DispString("www.armfly.com \navailable"); 

    

     while (1)

        

         GUI_Delay(1000);2

     }

}

1.     使用STemWin函数前,初始化一定要有。

2.     这里不仅仅是个延迟函数,窗口的刷新等功能最终是由这个函数实现的。

实际显示效果如下:

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

函数GUI_DispStringAt()

GUI_DispStringHCenterAt()

GUI_DispStringInRect() 平时使用的也比较多,有兴趣的可以在模拟器上面练练手。

6.2  文本绘制模式

通常,在所选窗口的当前文本位置,使用所选字体以正常文本模式写入文本。正常文本模式意思是指文本覆盖已经显示的任何内容,在这种情况下,字符掩码中设定的位元在屏幕上被设定。在这种模式下,活动位元使用前景颜色写入,而非活动位元用背景颜色写入。但在某些情况下,需要更改这种默认模式。STemWin为此提供了四种可以组合使用的标记 (一种默认加三种修改标记):

正常文本

        通过指定GUI_TEXTMODE_NORMAL0,可以正常显示文本。

反转文本

        通过指定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();      

    

     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);   

     }

}

实际显示效果如下:

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

关于文本设置方面还有一个函数这个里面还有一个函数GUI_SetTextStyle(),有兴趣的可以试试。

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

6.3  GUI_DispStringInRectWrap函数的使用

先贴一下官方的使用说明

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

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

#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[i]);

        Rect.x0 += 60;

        Rect.x1 += 60;

    }

    while (1)

    {

        GUI_Delay(10);

    }

}

实际显示效果如下:

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

6.4  开发板上实现自动换行的例子

下面是在开发板上面实现的自动换行例子:

#include "GUI.h"

 

int i;

char acText[] = "www.armfly.com  www.armfly.taobao.com Eric2013";

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[i]);

        Rect.x0 += 60;

        Rect.x1 += 60;

    }

    while (1)

    {

        GUI_Delay(10);

    }

}

将上面的代码复制到工程中的MainTask.c文件即可。

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

实际显示效果如下:

【STemWin教程入门篇】第6章 <wbr>STemWin文本显示

 

6.5  总结

文本的显示属于最基本的功能,初学者要多练练这些相关的函数,实践出真知。要不以后做一些复杂的例子,往往就是这些简单的地方出错。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有