猿问

请问一下,这个函数的参数&gm,是怎么回事?有时是graphmode,有时是gmode

我见到这个函数在一个程序上
是这么写来初始化图形系统的
void init(void)
{
int gd=DETECT,gm;
initgraph (&gd,&gm,"c:\\tc");
cleardevice ();
}

慕村225694
浏览 159回答 2
2回答

不负相思意

Turbo C对于用initgraph()函数直接进行的图形初始化程序,在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序, 当程序进行到intitgraph()语句时,再从该函数中第三个形式参数char *path中所规定的路径中去找相应的驱动程序。若没有驱动程序, 则在C:\TC中去找,如C:\TC中仍没有或TC不存在,将会出现错误:&nbsp;BGI Error: Graphics&nbsp;not initialized (use 'initgraph')&nbsp;因此, 为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):&nbsp;1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA&nbsp;此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。&nbsp;2.在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA&nbsp;此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。&nbsp;3.在程序中initgraph()函数调用之前加上一句:&nbsp;registerbgidriver(EGAVGA_driver):&nbsp;该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。&nbsp;经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。&nbsp;假设已作了前两个步骤,若再向例6中加registerbgidriver()函数则变成:&nbsp;例7:&nbsp;#include<stdio.h>&nbsp;#include<graphics.h>&nbsp;int main()&nbsp;{&nbsp;int gdriver=DETECT,gmode;&nbsp;registerbgidriver(EGAVGA_driver): / *建立独立图形运行程序 */&nbsp;initgraph( &gdriver,&nbsp;&gmode,"c:\\tc");&nbsp;bar3d(50,50,250,150,20,1);&nbsp;getch();&nbsp;closegraph();&nbsp;return 0;&nbsp;}&nbsp;上例编译链接后产生的执行程序可独立运行。&nbsp;如不初始化成EGA或CGA分辨率, 而想初始化为CGA分辨率, 则只需要将上述&nbsp;步骤中有EGAVGA的地方用CGA代替即可。

墨色风雨

initgraph()功 能: 初始化图形系统函数原型: void far initgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);头文件:graphics.h程序示例#include "graphics.h"#include "stdio.h"int main(void){/* request auto detection */int gdriver = DETECT, gmode, errorcode;/* initialize graphics mode */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;}&nbsp;
随时随地看视频慕课网APP
我要回答