C语言中,图形函数大致可分为两类:字符模式函数和图形模式函数。本节我们练习使用字符模式函数。
        使用字符模式函数应该在程序中联入conio.h头部文件。
        下面是一些函数的作用
1)    void    clreol();          从光标处删除到本行末
2)    void    delline();        清除本行内容,下面内容上提一行
                    delline();函数实际上还起到了向上卷屏的作用。
3)    void    insline();        在光标所在行插入一空行,原来该行及以
                                                        下各行皆向下移一行
4)      int    wherex();          返回当前光标的x()坐标
5)      int    wherey();          返回当前光标的y()坐标
6)    void    highvideo();    字符输出用高亮度字符
7)    void    lowvideo();      字符输出用低亮度字符
8)    void    normvideo();    字符输出用普通亮度字符
        在以上的各函数中皆不带参数,当然也可以写成括号中有void的形式:
        void  wherex(void);        还可以写成        wherex();
        清屏、清行、向后删行、插行的操作真有些CCEDWPS等编辑软件的风格,就是在你平时的屏幕设计中也用少不了。返回坐标的函数则给你的设计提供每一个环节的光标坐标值。有利于你前后响应。字符亮度的改变则会让你的字符显示出层次感,怎么样,赶快试试吧:
/*  No32.c*/
#  include  "stdio.h "
#  include  "conio.h "
main()
{  clrscr();
    gotoxy(10,1);
    cprintf( "甜密密, ");
    highvideo();                                                      /*高亮度显示*/
    cprintf( "\r\n                  你笑得甜密密, ");
    lowvideo();                                                        /*低亮度显示*/
    cprintf( "\r\n                  好象花儿开在春风里, ");
    normvideo();                                                      /*普通亮度显示*/
    gotoxy(10,4);  cprintf( "开在春风里 ");
    cprintf( "\r\n                  在哪里,在哪里见过你? ");
    printf( "\r\n                  你的笑容这样熟悉。 ");
    gotoxy(10,20);
printf( "任意键删去光标后的内容 ");
    gotoxy(18,3);          getch();
    gotoxy(18,3);
    clreol();                                                            /*删去光标后字符*/
    gotoxy(10,20);printf( "任意键删去本行的内容    ");
    gotoxy(18,3);          getch();
    delline();                                                          /*删去本行*/
    gotoxy(10,20);printf( "任意键在本行插一空行    ");
    gotoxy(18,3);          getch();
    insline();                                                          /*插入一空行*/
    gotoxy(1,7);
}
        应该注意的是,要发挥本节所讲的函数的作用,在显示时不能使printf函数,应使用cprintf函数。它的使用方法和printf的完全一样,只不过后面的cprintf能发挥亮度设置和颜设置的作用。前者
printf函数只有一种颜和单一的亮度。
        cprintf函数中,“\n”的作用不再是既回到行首又换行,它只起一个换行的作用,所以要把内容在行首显示必须再加一个“\r”
        上面的程序不是一真正对大家有用的程序,只是用来说明一个刚刚学到的几个函数的作用。在conio.h中还有一些字符型函数,它们都是带参数的。
9)    void  textcolor();                定义显示字符颜
10)  void  textbackground();      定义背景颜
        下面是颜数字和颜对照表
       BLACK            0                          DARKGRAY          8        深灰
       BLUE              1                          LIGHTBLUE        9        淡兰
       GREEN            2      绿                    LIGHTGREEN      10      淡绿
      CYAN              3                            LIGHTCYAN        11      淡青
c编程网站       RED                4                          LIGHTRED          12      淡红
      MAGENTA        5    洋红                     LIGHTMAGENTA  13      淡洋红
      BROWN            6                          YELLOW              14     
      LIGHTGRAY    7    淡灰                      WHITE                15     
        背景颜值只能是0-78个数字或其对应的英文大写单词。而前景(即字符)的颜可以是0-1516种颜或其对应的英文大写单词。当你定义的前景和背景相同时,屏幕上看不到输出的内容。
        textcolor(4);        textcolor(RED);    效果是相同的。
设置屏幕颜还可以使用
11)  void  textattr(前景颜+(背景颜));
        但这里的背景颜要有“ < <4”。如白底红字,就是:
            textattr(RED+(WHITE < <4));
12)  int  gettext(左上角x,左上角y,右下角x,右下角y,内存指针);
                            把定义的长方形区域内的内容存在内存中
13)  int  puttext(左上角x,左上角y,右下角x,右下角y,内存指针);
                            把内存中存好的内容显示在新定义的矩形块内
        这里的内存指针也可用字符形数组来代替。需要注意的是内存大小应该是所存内容的行数*列数*2”。比如把第3行第5列到第6行第75列的数据存到内存中,可以用下面的片段:
        char  buffer[4*70*2];
        gettext(5,3,75,6,buffer);
        然后你就可以用puttext函数来显示它了。
14)  void  movetext(左上角x,左上角y,右下角x,右下角y,
                                                                              新左上角x,新左上角y);
                              把矩形块移到新左上角(x,y)决定的地方
15)  void  window(左上角x,左上角y,右下角x,右下角y);
                            定义一个窗口,大小就是上面参数决定的长方形
        利用这一函数,你可以在屏幕上任何一个地方开辟一个窗口,并在上面显示需要的内容。这丝毫不影响屏幕其它地方的内容。当你定义了窗口后,你只能操作该窗口,gotoxy(),wherex(),wherey()
clrscr()等等函数所表示的都是你定义窗口中的情况。实际上这就为我们的操作带来了方便,你想操作哪儿,就定义哪儿,想回到平时状态的屏幕,就定义一个最大的窗口,window(1,1,80,25);就复原了。
        No.33号例子是利用puttextgettext函数以及颜定义来模仿CCEDWPS的菜单显示。但这个小程序没有可移动的光条,也没有菜单中内容的相应执行程序,只是演示一下屏幕的保存和释放而已。
/*  No33.c  */
#include  "conio.h "
#include  "stdio.h "
main()
{    int  i=1,j,ch;
      char  buffer[6*50*2];              /*开辟内存空间的大小*/
      clrscr();
      textcolor(0);                            /*定义字符颜*/
      textbackground(7);                  /*定义背景颜*/
      gotoxy(1,1);
      cprintf( "        功能1              功能2            功能3        ");
      textbackground(0);
      textcolor(14);
      gotoxy(1,2);
      cprintf( "What 's  your  name?                你叫什么名字 ");
      cprintf( "\n\rMy  name  is  Wang  Dong.        我叫王东. ");
      cprintf( "\n\rHow  old  are  are  you?          你多大了  .  ");
      cprintf( "\n\rI 'm  thirty-four.                  我四十四了 ");
      cprintf( "\n\r\n\rThis  is  Lesson  One.            这是第一课 ");
      while(1)
      {  j=i;
          textcolor(0);
          textbackground(7);
          if(i==1)
          {  gettext(1,2,13,5,buffer);
              gotoxy(2,2);      cprintf( "│第一课│ ");
              gotoxy(2,3);      cprintf( "│第二课│ ");
              gotoxy(2,4);      cprintf( "│第三课│ ");
              gotoxy(2,5);      cprintf( "└───┘ ");
          }
          if(i==2)
          {  gettext(13,2,25,5,buffer);
              gotoxy(14,2);      cprintf( "│菜单一│ ");
              gotoxy(14,3);      cprintf( "│菜单二│ ");
              gotoxy(14,4);      cprintf( "│菜单三│ ");
              gotoxy(14,5);      cprintf( "└───┘ ");
          }
          if(i==3)
          {  gettext(25,2,37,5,buffer);
              gotoxy(26,2);      cprintf( "│说明A  │ ");
              gotoxy(26,3);      cprintf( "│说明B  │ ");
              gotoxy(26,4);      cprintf( "│说明C  │ ");
              gotoxy(26,5);      cprintf( "└───┘ ");
          }
          textcolor(14);
          gotoxy(10,20);printf( "→向右移动    ←向左移动    Esc  退出 ");
          ch=getch();
          if((ch==75)&&(i==1))                /*菜单个数的判断*/
          {    i=3;  ch=0;}
          if((ch==77)&&(i==3))                /*ASCII  77是右箭头*/
          {    i=1;  ch=0;}
          if((ch==75)&&(i> 1))                  /*ASCII  75是左箭头*/
              i--;
          if((ch==77)&&(i <3))
              i++;
          if(ch==27)
              break;
          puttext(j*12-11,2,j*12+1,5,buffer);
    }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。