⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 屏幕函数.txt

📁 屏幕显示功能
💻 TXT
📖 第 1 页 / 共 3 页
字号:
     {
         int gdriver=DETECT,gmode;
         registerbgidriver(EGAVGA_driver):  / *建立独立图形运行程序 */
         initgraph( gdriver, gmode,"c:\\tc");
         bar3d(50,50,250,150,20,1);
         getch();
         closegraph();
         return 0;
     }
    上例编译链接后产生的执行程序可独立运行。
    如不初始化成EGA或CGA分辨率, 而想初始化为CGA分辨率,  则只需要将上述步骤中有EGAVGA的地方用CGA代替即可。

    3.屏幕颜色的设置和清屏函数
    对于图形模式的屏幕颜色设置, 同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数。
    设置背景色:        void far setbkcolor( int color);
    设置作图色:        void far setcolor(int color);
    其中color 为图形方式下颜色的规定数值, 对EGA, VGA显示器适配器, 有关颜色的符号常数及数值见下表所示。
                表3 有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  符号常数      数值     含义           符号常数      数值     含义
───────────────────────────────────
  BLACK          0       黑色           DARKGRAY       8       深灰
  BLUE           1       兰色           LIGHTBLUE      9       深兰
  GREEN          2       绿色           LIGHTGREEN     10      淡绿
  CYAN           3       青色           LIGHTCYAN      11      淡青
  RED            4       红色           LIGHTRED       12      淡红
  MAGENTA        5       洋红           LIGHTMAGENTA   13      淡洋红
  BROWN          6       棕色           YELLOW         14      黄色
  LIGHTGRAY      7       淡灰           WHITE          15      白色
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    对于CGA适配器, 背景色可以为表3中16种颜色的一种, 但前景色依赖于不同的调色板。共有四种调色板, 每种调色板上有四种颜色可供选择。不同调色板所
对应的原色见表4。
               表4 CGA调色板与颜色值表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       调色板                               颜色值
───────────       ──────────────────
  符号常数    数值              0         1         2         3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      C0       0               背景       绿        红        黄
      C1       1               背景       青       洋红       白
      C2       2               背景      淡绿      淡红       黄
      C3       3               背景      淡青     淡洋红      白
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 清除图形屏幕内容使用清屏函数, 其调用格式如下:
     voide far cleardevice(void);
    有关颜色设置、清屏函数的使用请看例8。
    例8:
     #include
     #include
     int main()
     {
          int gdriver, gmode, i;
          gdriver=DETECT;
          registerbgidriver(EGAVGA_DRIVER);/*建立独立图形运行程序*/
          initgraph(&gdriver, &gmode", "");/*图形初始化*/
          setbkcolor(0);                   /*设置图形背景*/
          cleardevice();
          for(i=0; i<=15; i++)
          {
            setcolor(i);                   /*设置不同作图色*/
            circle(320, 240, 20+i*10);     /*画半径不同的圆*/
            delay(100);                    /*延迟100毫秒*/
          }
          for(i=0; i<=15; i++)
          {
             setbkcolor(i);                /*设置不同背景色*/
             cleardevice();
             circle(320, 240, 20+i*10);
             delay(100);
          }
          closegraph();
          return 0;
     }

    另外, TURBO C也提供了几个获得现行颜色设置情况的函数。
    int far getbkcolor(void);      返回现行背景颜色值。
    int far getcolor(void);        返回现行作图颜色值。
    int far getmaxcolor(void);     返回最高可用的颜色值。

    4. 基本图形函数
    基本图形函数包括画点, 线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。

    一、画点
    1. 画点函数
     void far putpixel(int x, int y, int color);
    该函数表示有指定的象元画一个按color所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。
    在图形模式下, 是按象元来定义坐标的。对VGA适配器,  它的最高分辨率为640x480, 其中640为整个屏幕从左到右所有象元的个数, 480 为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0, 0), 右下角坐标为(639, 479), 水平方向从左到右为x轴正向, 垂直方向从上到下为y轴正向。TURBO C 的图形函数都是相对于图形屏幕坐标, 即象元来说的。
    关于点的另外一个函数是:
     int far getpixel(int x, int y);
    它获得当前点(x, y)的颜色值。

    2. 有关坐标位置的函数

     int far getmaxx(void);
    返回x轴的最大值。

     int far getmaxy(void);
    返回y轴的最大值。

     int far getx(void);
    返回游标在x轴的位置。

     void far gety(void);
    返回游标有y轴的位置。

     void far moveto(int x, int y);
    移动游标到(x, y)点, 不是画点, 在移动过程中亦画点。

     void far moverel(int dx, int dy);
    移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置, 移动过程中不画点。

    二、画线
    1. 画线函数
    TURBO C提供了一系列画线函数, 下面分别叙述:

     void far line(int x0, int y0, int x1, int y1);
    画一条从点(x0, y0)到(x1, y1)的直线。

     void far lineto(int x, int y);
    画一作从现行游标到点(x, y)的直线。

     void far linerel(int dx, int dy);
    画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。

     void far circle(int x, int y, int radius);
    以(x, y)为圆心, radius为半径, 画一个圆。

     void far arc(int x, int y, int stangle, int endangle, int radius);
    以(x, y)为圆心, radius为半径, 从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0度, 逆时针方向旋转一周,  依次为90, 180, 270和360度(其它有关函数也按此规定, 不再重述)。

     void ellipse(int x, int y, int stangle, int endangle, int xradius,
int yradius);
    以(x, y)为中心, xradius, yradius为x轴和y轴半径, 从角stangle 开始到
endangle结束画一段椭圆线, 当stangle=0, endangle=360时,  画出一个完整的
椭圆。

     void far rectangle(int x1, int y1, int x2, inty2);
    以(x1, y1)为左上角, (x2, y2)为右下角画一个矩形框。

     void far drawpoly(int numpoints, int far *polypoints);
     画一个顶点数为numpoints,   各顶点坐标由polypoints 给出的多边形。polypoints整型数组必须至少有2倍顶点数个无素。每一个顶点的坐标都定义为x,y, 并且x在前。值得注意的是当画一个封闭的多边形时, numpoints 的值取实际
多边形的顶点数加一, 并且数组polypoints中第一个和最后一个点的坐标相同。
    下面举一个用drawpoly()函数画箭头的例子。
    例9:
     #include
     #include
     int main()
     {
          int gdriver, gmode, i;
          int arw[16]={200, 102, 300, 102, 300, 107, 330,
                       100, 300, 93, 300, 98, 200, 98, 200, 102};
          gdriver=DETECT;
          registerbgidriver(EGAVGA_driver);
          initgraph(&gdriver, &gmode, "");
          setbkcolor(BLUE);
          cleardevice();
          setcolor(12);       /*设置作图颜色*/
          drawpoly(8, arw);   /*画一箭头*/
          getch();
          closegraph();
          return 0;
     }

    2. 设定线型函数
    在没有对线的特性进行设定之前, TURBO C用其默认值, 即一点宽的实线,但TURBO C也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择: 一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函
数。

     void far setlinestyle(int  linestyle,   unsigned  upattern,   int
thickness);
    该函数用来设置线的有关信息, 其中linestyle是线形状的规定, 见表5。
          表5. 有关线的形状(linestyle)
━━━━━━━━━━━━━━━━━━━━━━━━━
    符号常数             数值          含义
─────────────────────────
    SOLID_LINE             0           实线
    DOTTED_LINE            1           点线
    CENTER_LINE            2           中心线
    DASHED_LINE            3           点画线
    USERBIT_LINE           4           用户定义线
━━━━━━━━━━━━━━━━━━━━━━━━━
     thickness是线的宽度, 见表6。

          表6. 有关线宽(thickness)
━━━━━━━━━━━━━━━━━━━━━━━━━
     符号常数            数值           含义
─────────────────────────
     NORM_WIDTH           1             一点宽
     THIC_WIDTH           3             三点宽
━━━━━━━━━━━━━━━━━━━━━━━━━
    对于upattern, 只有linestyle选USERBIT_LINE 时才有意义( 选其它线型,uppattern取0即可)。此进uppattern的16位二进制数的每一位代表一个象元, 如果那位为1, 则该象元打开, 否则该象元关闭。

     void far getlinesettings(struct linesettingstype far *lineinfo);
           该函数将有关线的信息存放到由lineinfo 指向的结构中,     表中
linesettingstype的结构如下:
          struct linesettingstype{
               int linestyle;
               unsigned upattern;
               int thickness;
          }
    例如下面两句程序可以读出当前线的特性
     struct linesettingstype *info;
     getlinesettings(info);

     void far setwritemode(int mode);
    该函数规定画线的方式。如果mode=0, 则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1,  则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,  实际上画出的线是原有线与现在规定
的线进行异或后的结果。因此, 当线的特性不变, 进行两次画线操作相当于没有
画线。
    有关线型设定和画线函数的例子如下所示。
    例10.
     #include
     #include
     int main()
     {
          int gdriver, gmode, i;
          gdriver=DETECT;
          registerbgidriver(EGAVGA_driver);
          initgraph(&gdriver, &gmode, "");
          setbkcolor(BLUE);
          cleardevice();
          setcolor(GREEN);
          circle(320, 240, 98);
          setlinestyle(0, 0, 3);   /*设置三点宽实线*/
          setcolor(2);
          rectangle(220, 140, 420, 340);
          setcolor(WHITE);
          setlinestyle(4, 0xaaaa, 1);   /*设置一点宽用户定义线*/
          line(220, 240, 420, 240);
          line(320, 140, 320, 340);
          getch();
          closegraph();
          return 0;
     }

5. 封闭图形的填充 
填充就是用规定的颜色和图模填满一个封闭图形。 

一、先画轮廓再填充 
TURBO C提供了一些先画出基本图形轮廓, 再按规定图模和颜色填充整个封 
闭图形的函数。在没有改变填充方式时, TURBO C以默认方式填充。 下面介绍这 
些函数。 

void far bar(int x1, int y1, int x2, int y2); 
确定一个以(x1, y1)为左上角, (x2, y2)为右下角的矩形窗口, 再按规定图 
模和颜色填充。 
说明: 此函数不画出边框, 所以填充色为边框。 

void far bar3d(int x1, int y1, int x2, int y2, int depth, int 
topflag); 
当topflag为非0时, 画出一个三维的长方体。当topflag为0时, 三维图形不 
封顶, 实际上很少这样使用。 
说明: bar3d()函数中, 长方体第三维的方向不随任何参数而变, 即始终为 
45度的方向。 

void far pieslice(int x, int y, int stangle, int endangle, int 
radius); 
画一个以(x, y)为圆心, radius为半径, stangle为起始角度, endangle 为 
终止角度的扇形, 再按规定方式填充。当stangle=0, endangle=360 时变成一个 
实心圆, 并在圆内从圆点沿X轴正向画一条半径。 

void far sector(int x, int y, int stanle, intendangle, int 
xradius, int yradius); 
画一个以(x, y)为圆心分别以xradius, yradius为x轴和y轴半径, stangle 
为起始角, endangle为终止角的椭圆扇形, 再按规定方式填充。 

二、设定填充方式 
TURBO C有四个与填充方式有关的函数。下面分别介绍: 

void far setfillstyle(int pattern, int color); 
color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的 
符号常数如表7所示。 
表7. 关于填充式样pattern的规定 
━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
符号常数 数值 含义 
─────────────────────────── 
EMPTY_FILL 0 以背景颜色填充 
SOLID_FILL 1 以实填充 
LINE_FILL 2 以直线填充 
LTSLASH_FILL 3 以斜线填充(阴影线) 
SLASH_FILL 4 以粗斜线填充(粗阴影线) 
BKSLASH_FILL 5 以粗反斜线填充(粗阴影线) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -