浅析μC/GUI-v3.90a之GUI_DispString函数

转载 2013年12月04日 11:06:53
1.GUI_DispString()函数
gui/core/GUI_DispString.c
void GUI_DispString(const char GUI_UNI_PTR *s) {
  int xAdjust, yAdjust, xOrg;
  int FontSizeY;
  if (!s)
    return;
  GUI_LOCK();
  FontSizeY = GUI_GetFontDistY();                          //Font的y大小,默认8
  xOrg = GUI_Context.DispPosX;
 /* Adjust vertical position */
  yAdjust = GUI_GetYAdjust();                              //垂直对齐方式
  GUI_Context.DispPosY -= yAdjust;
  for (; *s; s++) {
    GUI_RECT r;
    int LineNumChars = GUI__GetLineNumChars(s, 0x7fff);    //获取一行\0或\n 8bits字节数[该版本只能显示英文]
    int xLineSize = GUI__GetLineDistX(s, LineNumChars);    //这些数据所占用x轴上横向点阵数
  /* Check if x-position needs to be changed due to h-alignment */
    switch (GUI_Context.TextAlign & GUI_TA_HORIZONTAL) {   //水平对齐方式
      case GUI_TA_CENTER: xAdjust = xLineSize / 2; break;
      case GUI_TA_RIGHT: xAdjust = xLineSize; break;
      default: xAdjust = 0;
    }
    r.x0 = GUI_Context.DispPosX -= xAdjust;
    r.x1 = r.x0 + xLineSize - 1; 
    r.y0 = GUI_Context.DispPosY;
    r.y1 = r.y0 + FontSizeY - 1;                           //该行字体显示矩形区域r
    GUI__DispLine(s, LineNumChars, &r);                    //显示该行数据
    GUI_Context.DispPosY = r.y0;
    s += GUI_UC__NumChars2NumBytes(s, LineNumChars);       //s指向下一行待显示的数据区
    if ((*s == '\n') || (*s == '\r')) {
      switch (GUI_Context.TextAlign & GUI_TA_HORIZONTAL) { 
      case GUI_TA_CENTER:
      case GUI_TA_RIGHT:
        GUI_Context.DispPosX = xOrg;                       //居中和右对齐,传递函数原始位置xOrg
        break;
      default:
        GUI_Context.DispPosX = GUI_Context.LBorder;
        break;
      }
      if (*s == '\n')
        GUI_Context.DispPosY += FontSizeY;                 //回车,转入下一行
    } else {
      GUI_Context.DispPosX = r.x0 + xLineSize;             //接着上一行的结束位置,继续显示
    }
    if (*s == 0)                                           //待显示数据已经显示完毕
      break;
  }
  GUI_Context.DispPosY += yAdjust;                         //将垂直对齐方式还原成未调用GUI_DispString之前值
  GUI_Context.TextAlign &= ~GUI_TA_HORIZONTAL;             //清除文本水平对齐方式
  GUI_UNLOCK();
}
-------------------------------------------------------------------------------------
2.GUI__DispLine()函数 2007-07-11 gliethttp
gui/core/GUICharLine.c
void GUI__DispLine(const char GUI_UNI_PTR *s, int MaxNumChars, const GUI_RECT* pr) {
  GUI_RECT r;
  {
    r = *pr;
    #if GUI_WINSUPPORT
    WM_ADDORG(r.x0, r.y0);
    WM_ADDORG(r.x1, r.y1);                                 //将矩形(r.x0,r.y0)平移到(GUI_Context.xOff,GUI_Context.yOff)坐标处
    WM_ITERATE_START(&r) {                                 //计算剪切域,另用《浅析μC/GUI-v3.90a之WM_ITERATE_START剪切域计算宏》专门讨论
    #endif
      GUI_Context.DispPosX = r.x0;
      GUI_Context.DispPosY = r.y0;
      /* Do the actual drawing via routine call. */
      _DispLine(s, MaxNumChars, &r);
    #if GUI_WINSUPPORT
    } WM_ITERATE_END();
    WM_SUBORG(GUI_Context.DispPosX, GUI_Context.DispPosY);
    #endif
  }
}

【C语言】 浅谈指针

指针是就是地址,是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占...
  • wbq1480
  • wbq1480
  • 2016年05月26日 12:25
  • 1421

C语言函数浅析

函数作用:main中代码的模块化 函数的重点: 1、传参:  类型必须绝对匹配 2、返回值 函数传参有几种形式? 只有一种,就是复制传参 复制的参数可以是任意的基本数据类型和构造数据类型 ...
  • qxiao2859894806
  • qxiao2859894806
  • 2013年12月08日 16:59
  • 336

浅析C++中的智能指针

《More Effective C++》条款28中这样写道: 所谓smart pointers,是“看起来、用起来、感觉起来都像内建指针,但提供更多机能”的一种对象。 智能指针是行为类似于指针的类...
  • wangshubo1989
  • wangshubo1989
  • 2015年09月10日 08:33
  • 2031

linux异步信号handle浅析

在初学linux编程的时候,一直觉得异步信号handle是个很神奇的东西,用户程序可以使用singal之类的系统调用为某某信号注册一个信号处理函数(handle函数)。       程序的二进制代码...
  • ctthunagchneg
  • ctthunagchneg
  • 2013年05月11日 15:43
  • 1311

“Ceph浅析”系列

开源技术专家章宇同学(@一棹凌烟)在C3沙龙分享过Ceph之后,最近来了劲头,一口气写了一系列《Ceph浅析》的博文,共8篇: “Ceph浅析”系列之一——前言 “Ceph浅析”系列之二——Ceph概...
  • qq_24916117
  • qq_24916117
  • 2015年12月30日 18:08
  • 585

jQuery和AngularJS的区别浅析

jQuery和AngularJS的区别浅析 这篇文章主要介绍了jQuery和AngularJS的区别浅析,本文着重讲解一个熟悉jQuery开的程序员如何应对AngularJS中的一些编程思想...
  • sundehui01
  • sundehui01
  • 2016年08月25日 10:15
  • 118

在Linux程序中实现国际化/本地化

国际化⇧ 程序的国际化/本地化是指根据用户语言和区域的不同程序可以使用针对用户的交互信息。 如,中文用户,则语言会变成中文,时间会显示北京时间,货币会显示RMB。...
  • cnlamo
  • cnlamo
  • 2014年09月05日 20:55
  • 595

linux组调度浅析

cgroup与组调度       linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来划分各种资源。比如:gr...
  • ctthunagchneg
  • ctthunagchneg
  • 2013年05月11日 17:08
  • 2709

μc/GUI学习笔记之三文本显示与数值显示

作者:lstzixing 转自:http://bbs.ednchina.com/BLOG_ARTICLE_1605302.HTM 3.1         文本显示 3.1.1...
  • whw8007
  • whw8007
  • 2013年04月18日 09:56
  • 831

Linux内存管理浅析(一)

1.Linux内存管理的主要内容 a.      虚拟内存管理 b.      内核空间内存管理 c.      用户空间内存管理 2.虚拟内存和物理内存映射 ZONE_HIGH...
  • u012398362
  • u012398362
  • 2016年11月27日 19:40
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅析μC/GUI-v3.90a之GUI_DispString函数
举报原因:
原因补充:

(最多只允许输入30个字)