C语言图形函数(四)

    7、图形模式下的文本输出
    在图形模式下,只能用标准输出函数,如printf()、puts()、putchar()函数输出文本到屏幕。除此之外, 其它输出函数(如窗口输出函数)不能使用,即是可以输出的标准函数,也只以前景色为白色,按80列,25行的文本方式输出。
    Turbo C 2.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 C 2.0中是有规定的。如果把一个字符串看成一个长方形的图形,在水平方向显示时,字符串长方形按垂直方向可分为顶部、中部和底部三个位置,水平方向可分为左、中、右三个位置,两者结合就有9个位置。settextjustify()函数的第一个参数horiz指出水平方向三个位置中的一个,第二个参数vert指出垂直方向三个位置中的一个,二者就确定了其中一个位置。当规定了这个位置后,用outtextxy()函数输出字符串时,字符串长方形的这个规定位置就对准函数中的(x, y)位置。而对用outtext()函数输出字符串时,这个规定的位置就位于现行游标的位置。有关参数horiz和vert的取值参见(表9)。

              (表9) 参数horiz和vert的取值
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       符号常数          数值           用于
    ────────────────────────────
     LEFT_TEXT             0            水平
     RIGHT_TEXT            2            水平
     BOTTOM_TEXT           0            垂直
     TOP_TEXT              2            垂直
     CENTER_TEXT           1            水平或垂直
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

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

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

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

               (表12) charsize的取值
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━
       符号常数或数值              含义
     ───────────────────────────
          1                        8*8点阵
          2                        16*16点阵
          3                        24*24点阵
          4                        32*32点阵
          5                        40*40点阵
          6                        48*48点阵
          7                        56*56点阵
          8                        64*64点阵
          9                        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);   /*三重笔划字体, 水平放大8倍*/
          outtextxy(20, 20, "Good Better");
          setcolor(15);
          settextstyle(3, 0, 5);  /*无衬笔划字体, 水平放大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 C 2.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);/*三重笔划字体, 放大8倍*/
          outtextxy(120, 120, "Very Good");
          setusercharsize(2, 1, 4, 1);/*水平放大2倍, 垂直放大4倍*/
          setcolor(15);
          settextstyle(3, 0, 5); /*无衬字笔划, 放大5倍*/
          outtextxy(220, 220, "Very Good");
          setusercharsize(4, 1, 1, 1);
          settextstyle(3, 0, 0);
          outtextxy(180, 320, "Good");
          getch();
          closegraph();
          return 0;
     }

posted @ 2005-11-20 03:24  念月思灵  阅读(966)  评论(0编辑  收藏  举报