Originally posted by 070 at 2010-4-10 09:18 PM:
目前你的程序保存的屏幕信息是什么样子的,是全屏幕没有内容吗,
有可能主程序在调用外界exe的时候,先切换到 dos,然后再运行exe
个人猜测,估计是错的:)
子程序(S_new.exe)代码如下:
BYTE far *p;
#define MAXX 640
#define MAXY 480
int Get256Blk(int sx,int sy,int ex,int ey, const char *filename);
int Set256Blk(int sx,int sy,int ex,int ey, const char *filename);
void InitGraph();
void CloseGraph();
void Exit(char *ErrorCode);
int main( int argc, char *argv)
{
int row, line;
Get256Blk(0, 0, MAXX-1, MAXY-1, "DISP");
row =3;
line = 2;
clrscr();
gotoxy(row, line++);
cprintf("Begin...\n");
getch();
InitGraph();
Set256Blk(0, 0, MAXX-1, MAXY-1, "DISP");
getch();
return 0;
}
/***************************************************************
函数名称:Get256Blk(int sx,int sy,int ex,int ey,const char *filename)
函数功能:保存指定矩形区域的屏幕显示信息到文件
***************************************************************/
int Get256Blk(int sx,int sy,int ex,int ey, const char *filename)
{
int j, i;
FILE *fp;
p=(BYTE far*)0xa0000000L;
fp = fopen(filename, "w+");
for(j=sy;j<=ey;j++)
{
for(i=0;i<ex-sx;i++)
{
fputc(*(p+(j*(ey-sy)+i)), fp);
}
}
fclose(fp);
return 0;
}
/***************************************************************
函数名称:Set256Blk(int sx,int sy,int ex,int ey,const char *filename)
函数功能:从文件恢复指定矩形区域的屏幕显示信息
***************************************************************/
int Set256Blk(int sx,int sy,int ex,int ey, const char *filename)
{
int i, j;
FILE *fp;
p=(BYTE far*)0xa0000000L;
fp = fopen(filename, "rb+");
if (fp == NULL)
{
Exit("Can Not Open The File.\n");
return 1;
}
for(j=sy;j<=ey;j++)
{
for(i=0;i<ex-sx;i++)
{
*(p+(j*(ey-sy)+i))=fgetc(fp);
}
}
fclose(fp);
return 0;
}
void InitGraph()
{
int mod;
int dr;
detectgraph(&mod, &dr);
initgraph(&mod,&dr,"");
}
void CloseGraph()
{
closegraph();
}
void Exit(char *ErrorCode)
{
printf("%s",ErrorCode);
getch();
exit(0);
}
主程序代码如下:
void main()
{
InitGraph();
/* 在屏幕上显示BMP图片*/
......
getch();
/* 非调用方式,主程序独立实现存屏幕及恢复 */
/*
Get256Blk(0, 0, MAXX-1, MAXY-1, "DISP");
getch();
clrscr();
Set256Blk(0, 0, MAXX-1, MAXY-1, "DISP");
getch();
*/
/* 调用方式,主程序调用子程序实现存屏幕及恢复 */
system("S_new.exe");
CloseGraph();
}
主程序同样生成一个EXE文件,可直接运行。
“有可能主程序在调用外界exe的时候,先切换到 dos,然后再运行exe”,这个有点不太明白,是不是就是这的原因,应该怎么解决,先谢谢前辈们了~~
我的意思是,切换到另一个程序的过程中,把显示模式也给切换了,由图形模式变成了文本模式,然后再接着运行那个子程序。。各人估计,我对dos下程序执行外部程序的流程也不大了解。
你那个备选的过程是不是可以正常运行,也就是不调用外界子程序而自己保存图像的?