registerbgidriver(EGAVGA_driver);该函数是什么,怎么用?

如题所述

独立图形运行程序的建立

Turbo C 对于用intitgraph()函数直接进行的图形初始化程序,在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序,当程序进行到intitgrapth()语句时,再从该函数中第三个形式参数char*path中所规定的路径中去找相应的驱动程序。若没有驱动程序,则在C:\TC中去找,如果C:\TC中仍然没有TC或TC不存在,则将会出现错误:

BGI Error:Graphics not initialized(use 'initgrapth')

因此,为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):

1.在C:\TC 子目录下输入命令:BGIOBJ EGAVGA

此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。

2.在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHIC.LIB库文件中。
3.在程序中initgrapth()函数调用之前加上一句:

registerbgidriver(EGAVGA_driver):

该函数告诉连接程序在链接时把EGAVGA的驱动程序装入到用户的执行程序中。经过上面的处理,编译链接后的执行程序可以在任何目录或其他兼容机上运行。假设已做了前两个步骤,再向程序中加入registerbgidriver()函数,则程序可以变成:/* 原程序(无法使用initgrapth进行初始化): */
#include <include.h>
#include <graphics.h>
main()
{
    int drive,mode;
    drive=DETECE;
    initgrapth(&drive,&mode,"");
    ...
    closegraph();
}

/*修改后的程序,经过编译连接后可以独立运行*/
#include <stdio.h>
#include <graphics.h>
int main()
{
    int gdriver=DETECT,gmode;
    registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序*/
    initgrapth(gdriver,gmode,"c:\\tc");
    
    bar3d(50,50,250,150,20,1);
    
    getch();
    closegrapth();
    
    return 0;
}
/*上述代码在执行编译链接操作后残生的执行程序可以独立运行*/

    如果不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率,则只需要将上述步骤中有EGAVGA的地方用CGA替代即可。
温馨提示:答案为网友推荐,仅供参考
相似回答