C语言图形模式(续)

7. 图形模式下的文本输出

  在图形模式下, 只能用标准输出函数, 如printf(), puts(), putchar() 函数输出文本到屏幕。除此之外, 其它输出函数(如窗口输出函数)不能使用, 即是可以输出的标准函数, 也只以前景色为白色, 按80列, 25行的文本方式输出。  Turbo C2.0也提供了一些专门用于在图形显示模式下的文本输出函数。下面将分别进行介绍。

  一、文本输出函数
   void far outtext(char far *textstring);
  该函数输出字符串指针textstring所指的文本在现行位置。

   void far outtextxy(int x, int y, char far *textstring);  
该函数输出字符串指针textstring所指的文本在规定的(x, y)位置。 其中x和y为象元坐标。

  说明:
   这两个函数都是输出字符串, 但经常会遇到输出数值或其它类型的数据,此时就必须使用格式化输出函数sprintf()。
  sprintf()函数的调用格式为:
     int sprintf(char *str, char *format, variable-list);
  它与printf()函数不同之处是将按格式化规定的内容写入str 指向的字符串中, 返回值等于写入的字符个数。
  例如:
     sprintf(s, "your TOEFL score is %d", mark);
  这里s应是字符串指针或数组, mark为整型变量。


  二、有关文本字体、字型和输出方式的设置

  有关图形方式下的文本输出函数, 可以通过setcolor()函数设置输出文本的颜色。另外, 也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输出。

   void far settexjustify(int horiz, int vert);
  该函数用于定位输出字符串。

  对使用outtextxy(int x, int y, char far *str textstring) 函数所输出的字符串, 其中哪个点对应于定位坐标(x, y)在Turbo C2.0中是有规定的。如果把一个字符串看成一个长方形的图形, 在水平方向显示时, 字符串长方形按垂直方向可分为顶部, 中部和底部三个位置, 水平方向可分为左, 中, 右三个位置,两者结合就有9个位置。

  settextjustify()函数的第一个参数horiz指出水平方向三个位置中的一个,第二个参数vert指出垂直方向三个位置中的一个, 二者就确定了其中一个位置。当规定了这个位置后, 用outtextxy()函数输出字符串时,  字符串长方形的这个规定位置就对准函数中的(x, y)位置。而对用outtext()函数输出字符串时,  这个规定的位置就位于现行游标的位置。有关参数horiz和vert的取值参见表9。
 
 表9. 参数horiz和vert的取值
  ━━━━━━━━━━━━━━━━━━━━━━━━
     符号常数  数值 用于
  ————————————————————————
   LEFT_TEXT   水平
   RIGHT_TEXT  水平
   BOTTOM_TEXT 0  垂直
   TOP_TEXT    垂直
   CENTER_TEXT 1  水平或垂直
  ━━━━━━━━━━━━━━━━━━━━━━━━

    void far settextstyle(int font, int direction, int charsize);
  该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。Turbo C2.0对函数中各个参数的规定见下列各表所示:

   表10. font的取值
   ━━━━━━━━━━━━━━━━━━━━━━━━
      符号常数 数值      含义
   ————————————————————————
    DEFAULT_FONT 0       8*8点阵字(缺省值)
    TRIPLEX_FONT 1       三倍笔划字体
    SMALL_FONT 2       小号笔划字体
    SANSSERIF_FONT            无衬线笔划字体
    GOTHIC_FONT       黑体笔划字
   ━━━━━━━━━━━━━━━━━━━━━━━━

   表11. direction的取值
   ━━━━━━━━━━━━━━━━━━━━━━━━
     符号常数  数值含义
   ————————————————————————
     HORIZ_DIR 0 从左到右
     VERT_DIR  1 从底到顶
   ━━━━━━━━━━━━━━━━━━━━━━━━

   表12. charsize的取值
   ━━━━━━━━━━━━━━━━━━━━━━━━
     符号常数或数值    含义
   ————————————————————————
   8*8点阵
   16*16点阵
   24*24点阵
   32*32点阵
   40*40点阵
   48*48点阵
   56*56点阵
   64*64点阵
   72*72点阵
       10    80*80点阵
    USER_CHAR_SIZE=0   用户定义的字符大小
   ━━━━━━━━━━━━━━━━━━━━━━━━


  有关图形屏幕下文本输出和字体字型设置函数的用法请看下例:
  例14:
   #include
   #include
   int main()
   {
int i, gdriver, gmode;
char s[30];
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");
setbkcolor(BLUE);
cleardevice();
setviewport(100, 100, 540, 380, 1);
setfillstyle(1, 2);     
setcolor(YELLOW);
rectangle(0, 0, 439, 279);
floodfill(50, 50, 14);
setcolor(12);
settextstyle(1, 0, 8);  
outtextxy(20, 20, "Good Better");
setcolor(15);
settextstyle(3, 0, 5); 
outtextxy(120, 120, "Good Better");
setcolor(14);
settextstyle(2, 0, 8);
i=620;
sprintf(s, "Your score is %d", i);
outtextxy(30, 200, s);     
setcolor(1);
settextstyle(4, 0, 3);
outtextxy(70, 240, s);
getch();
closegraph();
return 0;
   }

  三、用户对文本字符大小的设置
  前面介绍的settextstyle()函数, 可以设定图形方式下输出文本字符这字体和大小但对于笔划型字体(除8*8点阵字以个的字体),  只能在水平和垂直方向以相同的放大倍数放大。为此Turbo C2.0又提供了另外一个setusercharsize() 函数, 对笔划字体可以分别设置水平和垂直方向的放大倍数。该函数的调用格式为:

   void far setusercharsize(int mulx, int divx, int muly, int divy);

  该函数用来设置笔划型字和放大系数, 它只有在settextstyle( ) 函数中的charsize为0(或USER_CHAR_SIZE)时才起作用, 并且字体为函数settextstyle()规定的字体。调用函数setusercharsize()后,  每个显示在屏幕上的字符都以其缺省大小乘以mulx/divx为输出字符宽, 乘以muly/divy为输出字符高。该函数的用法见下例。

  例15:
   #include
   #include
   int main()
   {
int gdirver, gmode;
gdriver=DETETC;
initgraph(&gdriver, &gmode, "");
setbkcolor(BLUE);
cleardevice();
setfillstyle(1, 2);
setcolor(WHITE);   
rectangle(100, 100, 330, 380);
floodfill(50, 50, 14);  
setcolor(12);      
settextstyle(1, 0, 8);
outtextxy(120, 120, "Very Good");
setusercharsize(2, 1, 4, 1);
setcolor(15);
settextstyle(3, 0, 5);
outtextxy(220, 220, "Very Good");
setusercharsize(4, 1, 1, 1);
settextstyle(3, 0, 0);
outtextxy(180, 320, "Good");
getch();
closegraph();
return 0;
  


#ifndef _TURBOC_
#ifndef _BORLANDC_

#error You need a Turbo/Borland C compiler to compiler this program.

#endif
#endif

#include <conio.H>
#include <graphics.H>

char *text1 = "Just a simple demostration Here";
char *text2 = "by akuma@tds";

void fade_in(int Color, int DelayTime)
{
 int Count;
 for (Count = 0 ; Count < 63 ; Count++) {
 setrgbpalette(Color,Count,Count,Count);
 delay(DelayTime);
 }
}

void fade_out(int Color, int DelayTime)
{
 int Count;
 for (Count = 63 ; Count > 0 ; Count--) {
 setrgbpalette(Color,Count,Count,Count) ;
 delay(DelayTime) ;
 }
}

int main(int argc, char *argv[])
{
 int GraphicDriver = VGA, GraphicMode = VGAHI;
 int font_color = 2;
 
 (void)argc;
 (void)argv;
 
 initgraph( & GraphicDriver, & GraphicMode, "");

 setrgbpalette(font_color, 0, 0, 0);
 setcolor(font_color);
 settextstyle(SCRIPT_FONT, HORIZ_DIR, 4);
 outtextxy(80, 215, text1);
 settextstyle(TRIPLEX_FONT, HORIZ_DIR,3);
 outtextxy(130, 180, text2);

 fade_in(font_color, 15);
 delay(3000);
 fade_out(font_color, 15);

 getch();
 closegraph();
 return 0;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值