立体投影窗口的原理是在设定的窗口区域内以投影色(一半为黑色)进行涂色。然后再窗口位置上错位后,再用一不同于投影色的颜色画一窗口,将此窗口迭加在原投影窗口上,就形成了立体投影窗口。
Turbo C的文件窗口函数Window():
window(int left,int top,int right,int bottom);
其中left和top是窗口坐上角的屏幕坐标,right和bottom是窗口右下角的坐标。该函数在屏幕上定义一个文本窗口,并且使屏幕上此区域成为激活窗口,缺省窗口是全屏幕。下面的示例程序显示三个立体投影窗口,其中主要的函数Window-3d(int x1,int y1,int y2,int bk-color,fo-color)中的x1,y1,x2,y2分别是投影窗口的左上角和右下角的坐标,bk-color是立体投影窗口的背景色,fo-color是前景色,即在立体投影窗口中显示字符的颜色。
Window-3d()函数首先设置背景色为黑色,然后根据坐标参数开一窗口(此时屏幕上无窗口显示),通过调用清屏函数clrscr(),使得在屏幕上显示一黑色窗口。
接着,设置立体投影窗口的背景色和前景色,再按将黑色窗口的X轴和Y轴分别减二,减一后得到的坐标值开一窗口,即此窗口错位叠加在黑色窗口上。再清屏,就显示出一个立体投影窗口。
函数cprintf(),cputs(),clrscr()是窗口I/O函数,它自动激活定义的窗口,但Turbo C的缺省方式是直接送字符串到屏幕显示缓冲区,这在中文操作系统下不兼容,因而须设置全局变量directvidro = 0,以通过BIOS调用使用这些窗口I/O函数。
示例程序如下(屏幕上显示蓝、绿、绿三个立体投影窗口):
#include <conio.h>
void window_3d(int x1,int y1,int x2,int y2,int bk_color,int fo_color);
void main()
{
directvideo = 0;
textmode(3);
textbackground(WHITE);
clrscr();
window_3d(10,4,50,12,BLUE,WHITE);
gotoxy(17,6);
cputs("第一个窗口区");
window_3d(20,10,60,18,RED,WHITE);
gotoxy(17,6);
cputs("第二个窗口区");
window_3d(30,16,70,24,GREEN,WHITE);
gotoxy(17,6);
cputs("第三个窗口区");
getch();
return 0;
}
void window_3d(int x1,int y1,int x2,int y2,int bk_color,int fo_color)
{
textbackground(BLACK);
window(x1,y1,x2,y2);
clrscr();
textbackgound(bk_color);
textcolor(fo_color);
window(x1-2,y1-1,x2-2,y2-1);
clrscr();
}
评论前必须登录!
注册