📄 scrkeep.cpp
字号:
/*******************************************************************************
模 块: 屏幕保存模块.
功 能: 保存屏幕指定区域.
程序员: 雷中南.
版 本: v1.1
时 间: 1999-05-05
*******************************************************************************/
#include <graphics.h>
#include "scrkeep.h"
#include "stdio.h"
//构造函数.
ScrKeep::ScrKeep(RECT R) : FileIO()
{
Rect = R;
}
//保存屏幕.
//在保存屏幕图形时,以24行为单位将图形分为若干块进行保存.
//恢复时也是如此.
int
ScrKeep::Save()
{
int n;
int size;
n = Rect.Top;
//获得小块图形保存所需要的内存尺寸.
size=imagesize(0, 0, Rect.Width, 24);
//分配内存.
buffer=new unsigned char[size];
//在保存之前,先设置正确的视口.
setviewport(0,0,639,479,1);
while (n<Rect.Top+Rect.Height)
{
//如果未保存图形块大于24行,保存它.
if(Rect.Top+Rect.Height-n>=24)
{
getimage(Rect.Left, n, Rect.Left+Rect.Width, n+24, buffer);
if(FileIO::Write((char *)buffer, (long)(size)*(n-Rect.Top)/24, size)==L_ERROR)
{
delete []buffer;
return L_ERROR;
}
}
//如果未保存图形块小于24行,则按剩余数量保存它.
else if(Rect.Top+Rect.Height-n<24)
{
getimage(Rect.Left, n, Rect.Left+Rect.Width, Rect.Top+Rect.Height, buffer);
if(FileIO::Write((char *)buffer, (long)(size)*(n-Rect.Top)/24, size)==L_ERROR)
{
delete []buffer;
return L_ERROR;
}
}
n=n+24;
}
//释放内存.
delete []buffer;
return L_OK;
}
//恢复屏幕.
int
ScrKeep::Restore()
{
int n;
int size;
n = Rect.Top;
//获得小块图形恢复所需要的内存尺寸.
size=imagesize(0, 0, Rect.Width, 24);
//分配内存.
buffer=new unsigned char[size];
//在恢复之前,先设置正确的视口.
setviewport(0,0,639,479,1);
while (n<Rect.Top+Rect.Height)
{
//如果未恢复图形块大于24行,恢复它.
if(Rect.Top+Rect.Height-n>=24)
{
if(FileIO::Read((char *)buffer, (long)(size)*(n-Rect.Top)/24, size)==L_ERROR)
{
delete []buffer;
return L_ERROR;
}
putimage(Rect.Left, n, buffer, 0);
}
//如果未恢复图形块小于24行,则按剩余数量恢复它.
else if(Rect.Top+Rect.Height-n<24)
{
if(FileIO::Read((char *)buffer, (long)(size)*(n-Rect.Top)/24, size)==L_ERROR)
{
delete []buffer;
return L_ERROR;
}
putimage(Rect.Left, n, buffer, 0);
}
n=n+24;
}
//释放内存.
delete []buffer;
return L_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -