2. 独立图形运行程序的建立
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的驱动程序装入到用户的执行程序中。
经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。
假设已作了前两个步骤,若再向例6中加
registerbgidriver()函数则变成:
例7:
#include<graphics.h>
#include<conio.h>
int main()
{
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<graphics.h>
#include<conio.h>
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);
}
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);
返回最高可用的颜色值。