• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dlfen
博客园    首页    新随笔    联系   管理    订阅  订阅

有关屏幕操作的函数

有关屏幕操作的函数 void clrscr(void); 清除当前窗口中的文本内容, 并把光标定位在窗口的左上角(1, 1)处。 void clreol(void); 清除当前窗口中从光标位置到行尾的所有字符, 光标位置不变。 void gotoxy(x, y);

有关屏幕操作的函数
    
void clrscr(void);    
    
清除当前窗口中的文本内容, 并把光标定位在窗口的左上角(1, 1)处。    
    
void clreol(void);    
    
清除当前窗口中从光标位置到行尾的所有字符, 光标位置不变。    
    
void gotoxy(x, y);    
    
该函数很有用, 它用来定位光标在当前窗口中的位置。这里x,y是指光标要定位处的坐标(相对于窗口而言),当x,y超出了窗口的大小时,该函数就不起作用了。
    
int gettext(int xl,int yl,int x2,int y2,void *buffer);
    
int puttext(int x1,int y1,int x2,int y2,void *buffer);    
    
gettext()函数是将屏幕上指定的矩形区域内文本内容存入buffer 指针指向的一个内存空间。内存的大小用下式计算:     
    所用字节大小
=行数*列数*2
    
其中:
     行数
=y2-y1+1,列数=x2-x1+1    
     
puttext()函数则是将gettext()函数存入内存buffer中的文字内容拷贝到屏幕上指定的位置。
     
int movetext(int x1, int x2, int y2, int x3, int y3);    

     movetext()函数将屏幕上左上角为(x1, y1),右下角为(x2, y2)的一矩形窗口内的文本内容拷贝到左上角为(x3, y3)的新的位置。该函数的坐标也是相对于整个屏幕而言的。
    注意:
    
1. gettext()函数和puttext() 函数中的坐标是对整个屏幕而言的, 即是屏幕的绝对坐标,而不是相对窗口的坐标。
    
2. movetext()函数是拷贝而不是移动窗口区域内容, 即使用该函数后, 原位置区域的文本内容仍然存在。


#include<conio.h>
void 
main()
{
    
int i;
    
char *f[]={"Load    F3","Pick  Alt-F3","New    ",
            
"Save    F2","Write to    ","Directory",
            
"Change dir","Os shell    ","Quit Alt-X"};
    
char buf[11*16*2];
    
clrscr();
    
textcolor(YELLOW);
    
textbackground(BLUE);
    
clrscr();
    
gettext(10, 2, 24, 11, buf);
    
window(10, 2, 24, 11);
    
textbackground(RED);
    
textcolor(YELLOW);
    
clrscr();
    
for(i=0; i<9; i++)
    {
        
gotoxy(1, i+1);
        
cprintf("%s", f[i]);
    }
    
getch();
    
movetext(10, 2, 24, 11, 40, 10);
    
puttext(10, 2, 24, 11, buf);
    
getch();
}
    
下面再介绍一些函数:    
    
void highvideo(void);   //设置显示器高亮度显示字符
       
void lowvideo(void);    //设置显示器低亮度显示字符
       
void normvideo(void);   //使显示器返回到程序运行前的显示方式
       
int wherex(void);       //这两个函数返回当前窗口下光标的x,y坐标
       
int wherey(void);        
    
Turbo C 提供了非常丰富的图形函数,所有图形函数的原型均在graphics.h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*BGI,同时将集成开发环境Options/Linker中的Graphics lib选为on,只有这样才能保证正确使用图形函数。图形模式的初始化    
    不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式
(80列,25行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数:
    
void far initgraph(int far *gdriver, int far *gmode,char *path);
    
其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见下表。
    图形驱动程序由Turbo C出版商提供,文件扩展名为
.BGI。 根据不同的图形适配器有不同的图形驱动程序。
    例如对于EGA、 VGA 图形适配器就调用驱动程序EGAVGA
.BGI。
           图形驱动器、模式的符号常数及数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图形驱动器
(gdriver)      图形模式(gmode)
─────────────────────   色调     分辨率
符号常数    数值       符号常数    数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGA          
1         CGAC0        0      C0     320*200
                       
CGAC1        1      C1     320*200
                       
CGAC2        2      C2     320*200
                       
CGAC3        3      C3     320*200
                       
CGAHI        4      2色    640*200
──────────────────────────────
MCGA         
2         MCGAC0       0      C0     320*200
                       
MCGAC1       1      C1     320*200
                       
MCGAC2       2      C2     320*200
                       
MCGAC3       3      C3     320*200
                       
MCGAMED      4      2色    640*200
                       
MCGAHI       5      2色    640*480
──────────────────────────────
EGA          
3         EGALO        0     16色    640*200
                       
EGAHI        1     16色    640*350
──────────────────────────────
EGA64        
4         EGA64LO      0     16色    640*200
                       
EGA64HI      1      4色    640*350
──────────────────────────────
EGAMON       
5         EGAMONHI     0      2色    640*350
──────────────────────────────
IBM8514      
6         IBM8514LO    0    256色    640*480
                       
IBM8514HI    1    256色   1024*768
──────────────────────────────
HERC         
7         HERCMONOHI   0      2色    720*348
──────────────────────────────
ATT400       
8         ATT400C0     0      C0     320*200
                       
ATT400C1     1      C1     320*200
                       
ATT400C2     2      C2     320*200
                       
ATT400C3     3      C3     320*200
                       
ATT400MED    4      2色    320*200
                       
ATT400HI     5      2色    320*200
──────────────────────────────
VGA          
9         VGALO        0     16色    640*200
                       
VGAMED       1     16色    640*350
                       
VGAHI        2     16色    640*480
──────────────────────────────
PC3270       
10        PC3270HI     0      2色    720*350
──────────────────────────────
DETECT       
0         用于硬件测试
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    使用图形初始化函数设置VGA高分辨率图形模式


#include<graphics.h>
int 
main()
{
    
int gdriver, gmode;
    
gdriver=VGA;
    
gmode=VGAHI;
    
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
    
bar3d(100, 100, 300, 250, 50, 1);   /*画一长方体*/
       
getch();
    
closegraph();
    
return 0;
}
    
有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示器硬件的函数,其调用格式为    
    
void far detectgraph(int *gdriver, *gmode);    
    
其中gdriver和gmode的意义与上面相同。    
    自动进行硬件测试后进行图形初始化


#include<graphics.h>
int 
main()
{
    
int gdriver, gmode;
    
detectgraph(&gdriver, &gmode);     /*自动测试硬件*/
       
printf("the graphics driver is %d, mode is %d\n",gdriver,gmode);  /*输出测试结果*/
       
getch();
    
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");  /* 根据测试结果初始化图形*/
        
bar3d(10, 10, 130, 250, 20, 1);
    
getch();
    
closegraph();
    
return 0;
}
    
上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置,但Turbo C提供了一种更简单的方法, 即用gdriver=DETECT 语句后再跟initgraph()函数就行了。采用这种方法后,上例可改为:


#include<graphics.h>
int 
main()
{
    
int gdriver=DETECT, gmode;
    
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
    
bar3d(50, 50, 150, 30, 50, 1);
    
getch();
    
closegraph();
    
return 0;
}
    
另外,Turbo C 提供了退出图形状态的函数closegraph(),其调用格式为:    
    
void far closegraph(void);    
    
调用该函数后可退出图形状态而进入文本方式( Turbo C 默认方式),并释放用于保存图形驱动程序和字体的系统内存。独立图形运行程序的建立Turbo C对于用initgraph()函数直接进行的图形初始化程序,在编译和链接时并没有将相应的驱动程序(*.BGI) 装入到执行程序,当程序进行到intitgraph()语句时,再从该函数中第三个形式参数char *path中所规定的路径中去找相应的驱动程序。若没有驱动程序,则在C:\TC中去找,如C:\TC中仍没有或TC不存在,将会出现错误:
    BGI Error
: Graphics not initialized (use 'initgraph')    

    
因此,为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):
    
1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
    此命令将驱动程序EGAVGA
.BGI转换成EGAVGA.OBJ的目标文件。
    
2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
    此命令的意思是将EGAVGA
.OBJ的目标模块装到GRAPHICS.LIB库文件中。
    
3. 在程序中initgraph()函数调用之前加上一句:       
        
registerbgidriver(EGAVGA_driver):
    
该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。
    经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。假设已作了前两个步骤,若再加registerbgidriver
()函数则变成:

 

#include<stdio.h>
#include<graphics.h>
int 
main()
{
    
int gdriver=DETECT,gmode;
    
registerbgidriver(EGAVGA_driver);    /*建立独立图形运行程序 */
       
initgraph(gdriver, gmode,"c:\\caic\\bgi");
    
bar3d(50,50,250,150,20,1);
    
getch();
    
closegraph();
    
return 0;
}
    
上例编译链接后产生的执行程序可独立运行。
    如不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率, 则只需要将上述步骤中有EGAVGA的地方用CGA代替即可。
    屏幕颜色的设置和清屏函数对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。
    在Turbo C中分别用下面两个函数。    
    设置背景色
:    void far setbkcolor(int color);    
    
设置作图色:    void far setcolor(int color);    
    
其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见下表所示。
               有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 符号常数    数值     含义       符号常数    数值     含义
──────────────────────────────
 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种颜色的一种,但前景色依赖于不同的调色板。共有四种调色板,每种调色板上有四种颜色可供选择。不同调色板所对应的原色见下表。
                    CGA调色板与颜色值表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       调色板                               颜色值
──────────────────────────────
 符号常数  数值            
0         1         2         3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    C0      
0            背景       绿        红        黄
    C1      
1            背景       青       洋红       白
    C2      
2            背景      淡绿      淡红       黄
    C3      
3            背景      淡青     淡洋红      白
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    清除图形屏幕内容使用清屏函数,其调用格式如下:    
    
void far cleardevice(void); 


#include<stdio.h>
#include<graphics.h>
int 
main()
{
    
int gdriver, gmode, i;
    
gdriver=DETECT;
    
initgraph(&gdriver, &gmode, "c:\\caic\\bgi");     /*图形初始化*/
       
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);     //返回最高可用的颜色值。 

posted @ 2008-07-18 20:31  七夜鱼  阅读(320)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3