在DOS下进行图形编程
1 首先是开发环境。使用完整版的TC3.0++,可以在
这里下载。该版本包括完整的在线帮助文件,所有的文档资料。
2 中文支持+拼音输入法。
这里下载。包括中文系统和拼音输入法。想找一个天汇3.2完整版的没找到,暂时用这个了。
3 重要的是要设置好编译环境参数。即选中菜单options>linker中的graphics libaray,将graphics.lib(29KB)包括进去。这个是系统自带的。如果将显示驱动程序EGAVGA.BGI链接进去,这个文件大小增加到33KB,使用链接了驱动程序后的图形库文件,生成的EXE文件可以单独运行,在后面详细解释。
4 根据链接的图形库文件不同,程序编写以及运行生成的EXE文件方式略有不同。
4.1
用没链接显示驱动程序的图形库文件。需要注意指定显示驱动文件EGAVGA.BGI的路径。如果程序在指定的路径为空或者错误,程序会在TC.EXE文件所在路径寻找,仍找不到就会报错,称指定的文件无法找到。初学者通常都会遇到这个问题而束手无策,程序编译ok了,运行时总是报错。因为TC3.0++默认的将EGAVGA.BGI文件存放在“..//BGI”目录下,而一般的图形编程例子,包括TC自带的例子中,指定的显示驱动文件路径通常为“”。注意这里的“..”指TC的安装路径。而且要采用双反斜杠,前面的反斜杠为转义字符。知道原因后,问题就简单了。将正确的路径填写进去,再运行一下你的例子,看看问题是不是解决了。下面是图形编程的一个简单的例子,摘自TC的帮助文档,红色文字部分是需要特别注意的。
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
/* initialize graphics mode */
initgraph(&gdriver, &gmode, "..//BGI");//
图形模式初始化
//原来的语句是
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();//返回初始化结果
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s/n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* return with error code */
}
/* draw a line */
line(0, 0, getmaxx(), getmaxy());//在屏幕上从左上角到右下角画斜线
/* clean up */
getch();
closegraph();//退出图形模式
return 0;
}
同样的,所指定的文件路径也是TRIP.CHR等字体文件的路径。如果该路径指定错误,也会出现TRIP.CHR文件找不到的错误。生成EXE文件后,要脱离TC开发环境运行,需要把所有用到的显示驱动文件以及字体文件复制到EXE文件所在路径。
4.2
用链接了显示驱动程序的图形库文件。
4.2.1
链接显示驱动程序方法如下:进入DOS系统或者用WINXP下面的cmd控制台。如下图输入命令用../BGI路径下的BGIOBJ.EXE将EGAVGA.BGI转化为EGAVGA.OBJ链接文件
然后用../BIN下面的TLIB.EXE将EGAVGA.OBJ链接到GRAPHICS.LIB库文件。
新的图形库文件有33KB。
调用方法:需要在初始化前用registerbgidriver()函数注册链接的显示驱动程序。如下:
… //前面的语句
/* initialize graphics mode */
registerbgidriver(EGAVGA_driver);//
必须添加这一句
initgraph(&gdriver, &gmode, " ");
…//后面的语句
生成的EXE文件,可以脱离TC开发环境运行,不需要EGAVGA.BGI文件,因为该文件已经包含在生成的EXE文件中了。
4.2.2 如果还要链接字体文件*.CHR,即链接多个驱动和字体文件后,可能会出现链接的错误
Segment exceeds 64K (or a similar error),正确的链接方法和调用方法都与链接单个显示驱动文件不同。
A. 首先,在生成
obj文件时,用参数/F 。即采用下面命令
>bgiobj /f egavga。
生成的obj文件为EGAVGAF.OBJ。然后链接到原来的graphics.lib。
B. 其次,调用时函数不同。如注册显示驱动文件
registerfarbgidriver(EGAVGA_driver_far);
注册TRIP.CHR字体文件
registerfarbgifont(triplex_font_far);
注册LITT.CHR字体文件
registerfarbgifont(little_font_far);
注册SANS.CHR字体文件
registerfarbgifont(sansseritf_font_far);
注册GOTH.CHR字体文件
registerfarbgifont(gothic_font_far);
总结:一般情况下,所用显示驱动文件单一,字体也只用默认的,那么推荐采用第二种方法,生成新的库函数后,以后就一劳永逸了。但是这种方法存在很大局限性,所能支持的字体只有
TRIP.CHR,LITT.CHR,SANS.CHR,GOTH.CHR四种。
第一种方法所支持的字体没有限制。也特别适合初学者。因为标准的
TC中graphics.lib库函数都是没有加载驱动和字体文件的。只是要注意生成EXE文件脱离TC开发环境运行时,一定要把所用到的显示和字体驱动文件一起拷贝到EXE文件所在文件夹中。
最后,给出两个扩展的图形库文件。
1 链接了EGAVGA.BGI的文件,点
这里下载
2 支持的四种字体文件的库函数,点
这里下载
本文介绍了在DOS环境下进行图形编程的方法,包括使用TC3.0++开发环境,设置图形库,以及如何处理图形模式初始化。讨论了未链接和链接显示驱动程序时的不同处理方式,强调了正确指定驱动文件路径的重要性,并提供了错误处理和解决策略。
6008

被折叠的 条评论
为什么被折叠?



