首页 > 未分类 > c语言图形函数_4

c语言图形函数_4

2007年10月31日 岩岩魂   访问量: 564 发表评论 阅读评论

     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              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 C2.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 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);/*三重笔划字体, 放大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;
      }

相关文章:

  1. c语言图形函数_2
  2. c语言图形函数_1
  3. c语言图形函数_3
分类: 未分类 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.