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

作者:lstzixing

转自:http://bbs.ednchina.com/BLOG_ARTICLE_1605302.HTM


3.1         文本显示


3.1.1    显示支持控制字符


文本显示支持的ASCII字符如图3.1。


3.显示支持的ASCII控制字符



字符


C字符


功能


LF


\n


换行符。当前的文本显示位置更改到下一行。类似于C语言中的换行


CR


\r


类似于C语言的回车。不换行,仅回车,X坐标设置为0


3.1.2    文本显示API


主要的文本显示API如下:


l         void GUI_DispChar(U16 c):在当前窗口的当前的文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示;


l         void GUI_DispCharAt(U16 c, I16P x, I16P y):在当前窗口的指定文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示。指定的坐标为显示的字符的左上角坐标;


l         void GUI_DispChars(U16 c, int Cnt):在当前窗口的当前的文本位置使用当前字体显示Cnt个同一字符;如果字体不支持,则不会显示;


l         void GUI_DispNextLine(void):移动光标至下一行行首,相当于换行;


l         void GUI_DispString(const char GUI_FAR *s):在当前窗口的当前的文本位置使用当前字体显示一个字符串,可支持’\n’控制字符;如果字体不支持,则不会显示;


l         void GUI_DispStringLen(const char GUI_FAR *s, int Len); 在当前窗口的当前的文本位置使用当前字体显示一个字符;如果字体不支持,则不会显示.如果字符串长度较短,以空格填充,否则将只显示一部分;


l         void GUI_DispStringAt(const char GUI_FAR *s, int x, int y):在当前窗口的指定的文本位置使用当前字体显示一个字符串,可支持’\n’控制字符;如果字体不支持,则不会显示;


l         GUI_DispStringAtCEOL():显示字符串,并清除至显示串尾至对应行行末的显示内容;


l         void GUI_DispStringHCenterAt(const char GUI_FAR *s, int x, int y): 在当前窗口的以(x,y)为横向居中的位置用当前字体显示一个字符串(文本居中显示);如果字体不支持,则不会显示;


l         void GUI_DispStringInRect(const char GUI_FAR *s, const GUI_RECT *pRect, int Align):在在当前窗口中指定的矩形框内以当前字体显示一个字符串.。坐标的基准为字符串中部位置。对齐方式Align可选值为:


u       GUI_TA_TOP, GUI_TA_BOTTOM, GUI_TA_VCENTER for vertical alignment.;


u       GUI_TA_LEFT, GUI_TA_RIGHT, GUI_TA_HCENTER for horizontal alignment。


选择在矩形框内的对齐方式。如果矩形框太小,则有可能无法显示所有内容。


l         void GUI_DispStringInRectEx(const char GUI_UNI_PTR *s,GUI_RECT* pRect,int TextAlign,int MaxLen,const GUI_ROTATION * pLCD_Api); 在在当前窗口中指定的矩形框内以当前字体显示一个字符串.MaxLen-最大字符串长度。pLCD_Api取值GUI_ROTATE_0,GUI_ROTATE_CCW顺时针旋转90度。


注:上面的API函数主要可分为几类:单个字符的显示、换行、字符串的普通显示、矩形框内的字符串显示。附加的功能是设计显示对齐方式、文本样式。


3.1.3    文本模式的选择


1.    支持四种文本模式

l         GUI_TEXTMODE_NORMAL:普通文本模式,写入文本将覆盖原有LCD上的点;


l         GUI_TEXTMODE_REVERSE:反转模式,显示的文本颜色将反转;前景色与背景色反转;


注:这个暂不清楚功能如何。


l         GUI_TEXTMODE_TRANS:透明模式,写入文本将在原有的图形顶层显示;


l         GUI_TEXTMODE_XOR:异或模式。


注:这个暂不清楚功能如何。


2.    文本模式相关API

l         int GUI_GetTextMode(void):获取显示的文本模式;


l         int GUI_SetTextMode(int TextMode):设置显示的文本模式;


l         char GUI_SetTextStyle(char Style):设置显示的文本样式,主要样式有:


n         GUI_TS_NORMAL;


n         GUI_TS_UNDERLINE;


n         GUI_TS_STRIKETHRU;


n         GUI_TS_OVERLINE。


注:文本样式,有意思!


3.1.4    文本对齐方式:


l         int GUI_GetTextAlign(void):获取文本对齐方式;


l         int GUI_SetTextAlign(int TextAlign):设置文本的对齐方式;主要对齐方式:


n         GUI_TA_LEFT-GUI_TA_HCENTER-GUI_TA_RIGHT;


n         GUI_TA_TOP-GUI_TA_VCENTER-GUI_TA_BOTTOM。


l         void GUI_SetLBorder(int x):设置显示的左边距。


注:这个应该是设置了变量,然后在调用显示函数时使用。对齐方式应该是用于显示函数参数包含指定坐标的函数,如GUI_DispStringAt()。相应的坐标指定显示对齐用的基准坐标。见程序清单3.1中的左对齐与居中对齐效果。


3.1.5    当前文本位置:


每个任务都对应着一个文本位置,位置相对于窗口的(0,0)坐标而言。用于决定输出文本的当前位置。


l         char GUI_GotoXY(int x, int y);


l         char GUI_GotoX(int x);


l         char GUI_GotoY(int y);


l         int GUI_GetDispPosX(void);


l         int GUI_GetDispPosY(void)。


注:我觉得这里的文本显示位置应该是相对于的活动窗口而言,不是相对于整个液晶屏。当输入一个字符时,显示的起始位置对应于字模图像的左上角的坐标。


3.1.6    窗口的完全与部分清除


l         void GUI_Clear(void):清除当前窗口。如果没有指定当前窗口,则清除整个屏幕;


l         void GUI_DispCEOL(void):从当前窗口的当前位置以当前字体的高度清除文本至当前行行尾。


程序清单3.1文本显示测试程序


 

#include "gui.h"

 

void  MainTask( void )

{


         GUI_RECT rect = { 0, 50, 10, 250 };

 
         GUI_Init();        

         GUI_DispChars( 'C', 20 );              /* 显示20个字符C                      */


         GUI_DispNextLine();                    /* 换行                                  */


         GUI_DispChars( 'D', 10 );             /* 显示10个字符D                     */


         GUI_DispString( "Hello, uc/GUI\n" );


         GUI_DispStringLen("Hello,uc/GUI\n", 7 );     /* 显示指定长度的字符               */

 
         GUI_DispStringHCenterAt( "Hello,uc/GUI!", 0, 0 ); /* 文本居中位置显示                 */

         GUI_SetTextStyle( GUI_TS_UNDERLINE | GUI_TS_OVERLINE );/* 设置文本样式       */


         GUI_DispStringInRect( "Hello,uc/GUI!", &rect, GUI_TA_HCENTER );


 

         /* ------------------------ 文本串显示------------------------------ */

         GUI_SetTextAlign( GUI_TA_HCENTER );            /* 居中对齐                */


         GUI_DispStringAt( "GUI_TA_HCENTER!!!", 10, 100 );


 

         GUI_SetTextAlign( GUI_TA_LEFT );            /* 左对齐                    */

         GUI_DispStringAt( "GUI_TA_LEFT!!!", 0, 200 );


         GUI_SetColor(GUI_RED);


         GUI_DrawLine(80, 10, 240, 90);


         GUI_DrawLine(80, 90, 240, 10);


         GUI_SetBkColor(GUI_BLACK);


         GUI_SetColor(GUI_RED);


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

         }

}


3.2         数值显示API


3.2.1    十进制数显示支持


l         void GUI_DispDec(I32 v, U8 Len):显示十进制数,最大长度为9;如果数为负数,则显示时会添加负号。若实际的长度小于Len,则显示时将填0被充;


l         void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len):在指定位置显示十进制数,同GUI_DispDec();


l         void GUI_DispDecMin(I32 v); 以最小长度的串显示一个十进制数;


l         void GUI_DispDecShift(I32 v, U8 Len, U8 Shift):指定从右边起有多少位表示小数部分。Len指定显示的串的长度;


l         void DispDecSpace(I32 v, U8 MaxDigits);


l         void GUI_DispSDec(I32 v, U8 Len):显示有符号十进制数;同GUI_DispDec(),但是总是包含+/-符号;


l         void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift)。


注:如果需要指定len,若len较长,则显示将以空格或字符0补空;如len较小,则显示可能会出现不正确。使用GUI_DispDecMin()自动决定显示多长。Shift用于移位,本来是显示整数的,但现在可显示小数。最大支持显示9个字符长度。支持正负号显示。


3.2.2    浮点数显示支持:


l         void GUI_DispFloat(float v, char Len):显示符点数,小数点符号计入显示的符号数;


l         void GUI_DispFloatFix (float v, char Len, char Decs):显示浮点数,len-总长;Decs小数部分的位数;


l         void GUI_DispFloatMin(float f, char Fract):如果Fract值为负,则添加负号。Fract显示最少用的字符长度,并不是必需,实际显示时会根据需要选择最小值;


l         void GUI_DispSFloatFix(float v, char Len, char Decs):


l         void GUI_DispSFloatMin(float f, char Fract);指定显示的小数部分位数;总是在显示值前面显示+/-符号。


注:部分同上。但显示时是在后面补0。


3.2.3    二进制数显示支持:


l         void GUI_DispBin(U32 v, U8 Len):


l         void DispBinAt(U32 v, I16P y, I16P x, U8 Len)。


3.2.4    十六进制数显示支持


l         void GUI_DispHex(U32 v, U8 Len):


l         void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len)。


注:没有附加的“0x”字符串显示,且不支持正负符号显示。


3.2.5    测试程序


程序清单3.2  数值显示测试程序


#include "gui.h"

 
void    MainTask( void )

{


    GUI_RECT rect = { 0, 50, 10, 250 };


    GUI_Init();

  

    /* ---------- 十进制显示支持 ---------------*/


    GUI_DispString("Disp Dec:\n");


    GUI_DispDec( -32, 9 );              /* 显示负号,以零补空  */


    GUI_DispNextLine();


    GUI_DispDec( 56, 9 );               /* 不显正号,以零补空  */


    GUI_DispNextLine();


    GUI_DispDec( 51, 1 );               /* 不显正号,以零补空  */


    GUI_DispNextLine();

 

    GUI_DispDecMin( -32 );              /* 最小数量显示        */


    GUI_DispNextLine();


    GUI_DispDecMin( 54 );          


    GUI_DispNextLine();

 

    GUI_DispDecShift( -3212, 8, 1 );      /* 1位小数             */


    GUI_DispNextLine();


    GUI_DispDecShift( -3212, 8, 2 );      /* 2位小数             */


    GUI_DispNextLine();

 

    GUI_DispDecSpace( -3212, 9 );       /* 以空格补空          */

 

    /* ---------- 浮点数显示支持 ---------------*/


    GUI_DispNextLine();


    GUI_DispFloat( -3.1232, 9 );        /* 普通浮点显示支持     */


    GUI_DispNextLine();


    GUI_DispFloatFix( -3.14159, 9, 2 );  /* 最大9个字符,2个小数部分*/


    GUI_DispNextLine();

 

    /* ---------- 二进制数显示支持 ---------------*/


    GUI_DispBin( 0xfe, 8 );


    GUI_DispNextLine();

 

    /* ---------- 十六进制数显示支持 ---------------*/


    GUI_DispHex( 0xfe, 4 );


    GUI_DispNextLine();

 

    while( 1 )


    {


        GUI_Delay( 100 );


    }


}


 


By:lstzixing


Mail:blievethink@gmail.com


Blog:http://blog.ednchina.com/lstzixing


2010-5-7


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值