你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱STemWin教程】第6章 STemWin文本显示

[复制链接]
baiyongbin2009 发布时间:2015-1-10 13:40
本帖最后由 baiyongbin2009 于 2015-1-10 13:42 编辑

特别说明:完整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实现换行,模拟器的使用方法,看前面几期就会了。
  1. void MainTask(void)
  2. {
  3.      GUI_Init();(1)
  4.      /*  对于初学者,这个地方一定要注意,这里只是设置背景颜色,也就是给变量赋值了一下  */
  5.      GUI_SetBkColor(GUI_BLUE);
  6.      /* 要实现背景颜色的改变,必须的执行下面这句 */
  7.      GUI_Clear();
  8.      GUI_SetFont(&GUI_Font8x16);
  9.      /* 这里调用字符串显示  并实现一下换行  */
  10.      GUI_DispString("www.armfly.com \navailable");
  11.    
  12.      while (1)
  13.      {     
  14.          GUI_Delay(1000);(2)
  15.      }
  16. }
复制代码
1.    使用STemWin函数前,初始化一定要有。
2.    这里不仅仅是个延迟函数,窗口的刷新等功能最终是由这个函数实现的。
       实际显示效果如下:
6.1.png

函数GUI_DispStringAt()
        GUI_DispStringHCenterAt()
        GUI_DispStringInRect() 平时使用的也比较多,有兴趣的可以在模拟器上面练练手。
6.2  文本绘制模式
    通常,在所选窗口的当前文本位置,使用所选字体以正常文本模式写入文本。正常文本模式意思是指文本覆盖已经显示的任何内容,在这种情况下,字符掩码中设定的位元在屏幕上被设定。在这种模式下,活动位元使用前景颜色写入,而非活动位元用背景颜色写入。但在某些情况下,需要更改这种默认模式。STemWin为此提供了四种可以组合使用的标记 (一种默认加三种修改标记):
正常文本
    通过指定GUI_TEXTMODE_NORMAL或0,可以正常显示文本。
反转文本
    通过指定GUI_TEXTMODE_REV,可以反转显示文本。通常的黑底白字显示方式将变为白底黑字显示。
透明文本
    通过指定GUI_TEXTMODE_TRANS,可以显示为透明文本。透明文本表示文本写在屏幕上已经可见的内容之上。不同之处在于,屏幕上原有的内容仍然可见,而在正常文本中,背景会替换为当前选择的背景色。
异或文本
    通过指定GUI_TEXTMODE_XOR,可以使用异或模式显示文本。通常情况下,用白色绘制的 (实际字符)显示是反相的。如果背景色是黑色,效果与默认模式(正常文本)是一样的。如果背景是白色,输出与转文本一样。如果使用彩色,反相的像素由下式计算:
        新像素颜色=颜色的值–实际像素颜色–1。
透明反转文本
    通过指定GUI_TEXTMODE_TRANS | GUI_TEXTMODE_REV,可以显示为透明反转文本。与透明文本一样,它不会覆盖背景,而且和反转文本一样,该文本会反转显示。其他信息请注意,还可以使用缩写形式:例如,GUI_TM_NORMAL。
  1. void MainTask(void)
  2. {   
  3.      GUI_Init();
  4.      /* 设置字体 */   
  5.      GUI_SetFont(&GUI_Font8x16);
  6.      /* 设置背景颜色 */   
  7.      GUI_SetBkColor(GUI_BLUE);
  8.      GUI_Clear();      
  9.      /* 设置画笔的粗细以及颜色,只有矢量函数才能设置Size */
  10.      GUI_SetPenSize(10);   
  11.      GUI_SetColor(GUI_RED);
  12.      GUI_DrawLine(80, 10, 240, 90);   
  13.      GUI_DrawLine(80, 90, 240, 10);
  14.      GUI_SetBkColor(GUI_BLACK);
  15.      GUI_SetColor(GUI_WHITE);      
  16.      /* 设置正常模式 */
  17.      GUI_SetTextMode(GUI_TM_NORMAL);  
  18.      GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 160, 10);
  19.      /* 翻转文本 */   
  20.      GUI_SetTextMode(GUI_TM_REV);
  21.      GUI_DispStringHCenterAt("GUI_TM_REV" , 160, 26);        
  22.      /* 透明文本 */
  23.      GUI_SetTextMode(GUI_TM_TRANS);   
  24.      GUI_DispStringHCenterAt("GUI_TM_TRANS" , 160, 42);
  25.      /* 异或文本 */   
  26.      GUI_SetTextMode(GUI_TM_XOR);
  27.      GUI_DispStringHCenterAt("GUI_TM_XOR" , 160, 58);   
  28.      /* 设置文本模式 */
  29.      GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);   
  30.      GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 74);
  31.      while (1)   
  32.      {
  33.          GUI_Delay(1000);   
  34.      }
  35. }
复制代码
    实际显示效果如下:
6.2.png

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

6.3  GUI_DispStringInRectWrap函数的使用
    先贴一下官方的使用说明
6.4.png

    下面这个例子非常的好,很好的说明了三种模式的区别
  1. #include "GUI.h"

  2. int i;
  3. char acText[] = "This example demonstrates text wrapping";
  4. GUI_RECT Rect = {10, 10, 59, 59};
  5. GUI_WRAPMODE aWm[] = {GUI_WRAPMODE_NONE,
  6.                       GUI_WRAPMODE_CHAR,
  7.                       GUI_WRAPMODE_WORD};
  8. void MainTask(void)
  9. {
  10.     GUI_Init();
  11.     GUI_SetTextMode(GUI_TM_TRANS);
  12.     for (i = 0; i < 3; i++)
  13.     {
  14.         GUI_SetColor(GUI_BLUE);
  15.         GUI_FillRectEx(&Rect);
  16.         GUI_SetColor(GUI_WHITE);
  17.         GUI_DispStringInRectWrap(acText, &Rect, GUI_TA_LEFT, aWm[i]);
  18.         Rect.x0 += 60;
  19.         Rect.x1 += 60;
  20.     }
  21.     while (1)
  22.     {
  23.         GUI_Delay(10);
  24.     }
  25. }
复制代码
    实际显示效果如下:
6.5.png




收藏 评论1 发布时间:2015-1-10 13:40

举报

1个回答
baiyongbin2009 回答时间:2015-1-10 13:40:50
6.4  开发板上实现自动换行的例子
    下面是在开发板上面实现的自动换行例子:
  1. #include "GUI.h"

  2. int i;
  3. char acText[] = "www.armfly.com www.armfly.taobao.com Eric2013";
  4. GUI_RECT Rect = {10, 10, 59, 59};
  5. GUI_WRAPMODE aWm[] = {GUI_WRAPMODE_NONE,
  6. GUI_WRAPMODE_CHAR,
  7. GUI_WRAPMODE_WORD};
  8. /*
  9. *********************************************************************************************************
  10. * 函 数 名: MainTask
  11. * 功能说明: GUI主函数
  12. * 形 参:无
  13. * 返 回 值: 无
  14. *********************************************************************************************************
  15. */
  16. void MainTask(void)
  17. {
  18. GUI_Init();
  19. GUI_SetTextMode(GUI_TM_TRANS);
  20. for (i = 0; i < 3; i++)
  21. {
  22. GUI_SetColor(GUI_BLUE);
  23. GUI_FillRectEx(&Rect);
  24. GUI_SetColor(GUI_WHITE);
  25. GUI_DispStringInRectWrap(acText, &Rect, GUI_TA_LEFT, aWm[i]);
  26. Rect.x0 += 60;
  27. Rect.x1 += 60;
  28. }
  29. while (1)
  30. {
  31. GUI_Delay(10);
  32. }
  33. }
复制代码
    将上面的代码复制到工程中的MainTask.c文件即可。
6.6.jpg
    实际显示效果如下:
6.7.png
6.5  总结
    文本的显示属于最基本的功能,初学者要多练练这些相关的函数,实践出真知。要不以后做一些复杂的例子,往往就是这些简单的地方出错。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版