● 提示 BGI Error
用TC写BGI图形编程的代码时,最容易出现 BGI Error 的问题,例如在屏幕上提示这样一行字: Graphics not initialized (use 'initgraph') 然后程序就退出了。在WIN98下这行字能够看到,但是在WIN2000或WINXP下就闪一下这行字(实际上这行字在WIN2K或XP下会显示出来的,只不过时间太短了你看不到罢了)直接退出了。这行字是什么意思呢?从字面上理解,就是没有initgraph啊?但是程序的代码里面确实是写了initgraph啊?这样的出错提示,的确让很多编程者摸不着头脑。实际上,它的问题并不出在没有使用initgraph上,是你没有使用正确的路径。
TC BGI提供了一个graphics.h,一个graphics.lib,一堆.bgi文件和一个bgiobj.exe。就当前问题来说,是.bgi导致了你的错误出现。例如最常见的
int gd=VGA,gm=VGAHI;
initgraph(&gd,&gm,"c:\tc20");
来说,它的意思是initgraph使用gd为bgi驱动包,该驱动包里使用gm的屏幕模式初始化,最后一个参数就是该bgi驱动包的位置。例如上面的代码,就是说使用VGA模式(该模式驱动包含于egavga.bgi),使用其中的VGAHI方式(640*480 16 color)初始化屏幕,该驱动包位于"c:\tc20"目录下。你会问如果egavga.bgi不在"c:\tc20"下呢?那么 Graphics not initialized (use 'initgraph') 的问题就出现啦!
但是指定bgi路径总不太好,不可能每个人的电脑上都在"c:\tc20"下有你需要的bgi文件。把bgi文件拷贝到你指定的路径如"c:\tc20"下也显得太麻烦。有没有好的解决方法呢?有,下面就是两种通常的解决方法:
方法一:
使用相对路径。相对路径你也许不知道,在次也不必来龙去脉把相对路径的使用说得特别清楚。简单地说,就是initgraph的最后一个字符串使用空"",然后生成的EXE,将自动在同级目录下找对应的bgi来运行。就上一个程序打个比方,把它最后一个字符串写成空串"",如:
int gd=VGA,gm=VGAHI;
initgraph(&gd,&gm,"");
这样一来,只要程序目录下有egavga.bgi,就可以运行。如果你是在c:\tc20下的TC集成环境里运行的,那么只需要把egavga.bgi拷贝到c:\tc20下即可。如果你又把你所生成的EXE文件拷贝到桌面上,也只需要把egavga.bgi拷贝到桌面上你的程序即可运行啦。总之一句话:使用这种方法,须保证你EXE使用的bgi文件与你生成的EXE文件同目录。
方法二:
更方便的是,WIN-TC提供了模板的功能,其中的一个就是“BGI图形编程模板”。使用该模板生成的EXE,如果是用ega或vga模式的话,连.bgi文件都可以不需要来直接运行你的EXE啦,也就是说,如果你要把你的BGI图形EXE程序让别人去运行,即使是没有装TC的电脑上,也只需要一个EXE就能成功初始化BGI了,是不是很方便啊?