int gdriver, gmode;
detectgraph(&gdriver, &gmode);/*自动测试硬件*/
printf(\输出测试结果*/ getch();
initgraph(&gdriver, &gmode, \根据测试结果初始化图形*/ bar3d(10, 10, 130, 250, 20, 1); getch(); closegraph(); return 0; }
上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置,但Turbo C提供了一种更简单的方法,即用gdriver= DETECT语句后再跟initgraph()函数就行了。采用这种方法后, 上例可改为:
例1.3:
#include
int gdriver=DETECT, gmode; initgraph(&gdriver, &gmode, \ bar3d(50, 50, 150, 30, 1); getch(); closegraph(); return 0; }
另外,Turbo C提供了退出图形状态的函数closegraph(), 其调用格式为: void far closegraph(void);
调用该函数后可退出图形状态而进入文本方式(Turbo C 默认方式),并释放用于保存图形驱动程序和字体的系统内存。
- 5 -
程序练习1.1:编辑例1.3程序,存为.c文件,在TC环境下编译、调试、运行,运行结果如图1.1所示。
图1.1初始化图形程序运行结果截图
问题1.1:写出初始化图形程序的必要步骤。
问题1.2:关于图形程序的初始化,你遇到的问题和解决方法是什么?
问题1.3:修改代码snake.c,进行代码规范性练习。 修改后规范的代码:
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()函数调用之前加上一句:
- 6 -
registerbgidriver(EGAVGA_driver) ;
该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。
经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。 假设已作了前两个步骤,若再向例3中加 registerbgidriver()函数则变成: 例2.1:
#include
int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver) ;/ *建立独立图形运行程序 */ initgraph( gdriver, gmode,\ bar3d(50,50,250,150,20,1); getch(); closegraph(); return 0; }
上例编译链接后产生的执行程序可独立运行。
如不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率,则只需要将上述步骤中有EGAVGA的地方用CGA代替即可。
3屏幕颜色的设置和清屏函数(4学时)
对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数。
设置背景色:void far setbkcolor( int color); 设置作图色:void far setcolor(int color);
其中color 为图形方式下颜色的规定数值,对EGA, VGA显示器适配器,有关颜色的符号常数及数值如表3.1所示。
- 7 -
表3.1 有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数
数值
含义
符号常数
数值
含义
───────────────────────────────────────────────────────────
BLACK BLUE
GREEN CYAN RED
0 1
黑色 兰色 绿色 青色 红色 洋红 棕色 淡灰
DARKGRAY
8
深灰 深兰 淡绿 淡青 淡红 淡洋红 黄色 白色
LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED
9 10 11 12
2 3 4 5 6
MAGENTA BROWN
LIGHTMAGENTA YELLOW WHITE
13 14 15
LIGHTGRAY 7
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
对于CGA适配器,背景色可以为表3中16种颜色的一种,但前景色依赖于不同的调色板。共有四种调色板,每种调色板上有四种颜色可供选择。不同调色板所对应的原色见表3.2。
表3.2 CGA调色板与颜色值表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
调色板
颜色值
───────────────── ───────────────────────── 符号常数
数值
0
1
2
3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ C0
C1 C2 C3
0 1 2 3
背景 背景 背景 背景
绿 青
红
黄 白 黄 白
洋红 淡红 淡洋红
淡绿 淡青
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
清除图形屏幕内容使用清屏函数,其调用格式如下: voidfar cleardevice(void);
有关颜色设置、清屏函数的使用请看例5。 例3.1:
#include
#include
int gdriver, gmode, i;
- 8 -
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); 返回最高可用的颜色值。
程序练习3.1:编辑例3.1程序,存为.c文件,在TC环境下编译、调试、运行,运行结果如图3.1 – 3.2所示。
图3.1 屏幕颜色设置与清屏程序运行结果截图1
- 9 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言项目实践指导书(图形程序设计)(2)在线全文阅读。
相关推荐: