QBASIC中有一个SCREEN函数,它的调用形式为SCREEN(row%,c
olumn% [,colorflag%])?本函数功能为返回当前文本方式下
row行column列处字符或属性,当colorflag%参数省略或等于0时返回
字符,当colorfiag%参数为1时返回该字符的属性?此函数实在很有
用,能否也给TURBOC增加一个类似的函数呢?答案是肯定的,有两种
编程方法?
方法一:调用BIOS显示中断?
/*文件名为SCREEN1.C*/
#include<dos.h>
#include<conio.h>
#include<stdio.h>
int screen(int x,int v,int colorflag)
{ int oldx,oldy;
union REGS r;
if(x>80||x<1||y>25||y<1) return -1;
oldx=wherex()
oldy=wherey()
gotoxy(x,y);
r.h.ah=8;
r.h.bh=0;
int86(0x10,&r,&r);
gotoxy(oldx,oldy);
if(colorflag)return r.h.ah;
else return r.h.al; }
方法二:直接操纵硬件编程?
/*文件名为SCREEN2.C*/
int screen(int x,int y,int colorfiag)
{ char far *t=(char far *)0xb8000000;/*硬件直接
写屏地址*/
if(x>80||x<1||y>25||y<1) return -1;
t+=(x-1)*2+(y-1)*80*2;
if(colorflag)t++;
return (*t);
}
使用本函数时,需带三个参数x?y?colorfag,当colorflag值为
真时返回x列y行处字符的属性,否则返回该字符的ASCII值,参数值不
符合要求时返回失败值-1?两种方法各有优缺点?方法一由于调用中
断,故兼容性非常好,但速度慢且代码(这里的代码指编译后的二进
制代码,非源程序代码)所占空间大;方法二直接操纵硬件编程,虽
速度快,代码短,但兼容性差,只适用于80列彩显文本方式?读者可
修改直接写屏地址使之适用于单显?以上程序在TURBO C++3.0的C
方式下通过? □
Bookmark
Email this
Hits: 5611
Comments (0)

Write comment



