一步一个脚印,先布置背景,再现实动态文字输出,再解决输出时破坏背景的问题,再优化代码。
利用保护现场输出文本再恢复现场的方式实现以及代码的封装,值得在其他程序中尝试。
// 实现动态文字.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "easyx.h"
#include "conio.h"
//将现场保护的功能封装
//x,y表示输出文字的位置
//s表示输出的字符串,如果s为NULL,则恢复背景
void MoveAndSave(int x,int y,LPCTSTR s)
{
int w,h;
static IMAGE img;
if(s==NULL)//如果s指针为NULL时,恢复现场
putimage(x,y,&img);
else{
w=textwidth(s);
h=textheight(s);
getimage(&img,x,y,w,h);//保护现场
outtextxy(x,y,s);//输出文本
}
}
void main( )
{
int i;
//初始化绘图窗口
initgraph(640,480);
//设置输出文字时的背景模式
setbkmode(TRANSPARENT);
//设置文字颜色
setlinecolor(WHITE);
//定义并初始化字符串变量
TCHAR s[]=_T("动态文字");
//定义保存图像的变量IMAGE 变量来保护现场
IMAGE img;
//绘制背景
for(i=0;i<=640;i++)//竖线
{
setlinecolor(HSLtoRGB((float)i,1,0.25));//实现绘制彩虹效果
line(i,0,i,480);
}
for(i=0;i<600;i++){
MoveAndSave(i,100,s);//保护现场并输出文本
Sleep(20);
MoveAndSave(i,100,NULL);;//恢复现场
}
//关闭绘图窗口
getch();
closegraph();
}