TC VC++6.0 写屏
网上找的源代码
#include<stdio.h>
#include<dos.h>
void Clear(int,int,int,int);/*用户自定义函数Clear(),Print()为void类型*/
void Print(int,int,char *,int);
void main(void)
{
char *s="Hello,Xu Jin Bao!";
char *str="Apr 16,1996";
Clear(0,0,24,79); /*清整个屏幕*/
Print(8,16,s,4);
Print(10,18,str,1);
getchar(); /*敲任意健继续,相当于等待*/
Clear(8,16,8,32); /*清s字符串*/
Clear(10,18,10,28); /*清str字符串*/
}
/*Print()函数利用直接写屏技术,在屏幕(StartX,StartY)处显示一字符串str,*/
void Print(int StartX,int StartY,char *str,int attr)
{
char far *p;
p=(char far*)0xb8000000; /*显示缓存区首址*/
p=p+StartX*160+StartY*2;/*计算字符串显示位置*/
for(;*str!='\0';p+=2) /*显示字符串*/
{
*p=*str++;
*(p+1)=attr;
}
}
/*Clear()清除指定屏幕区域*/
void Clear(int StartX,int StartY,int EndX,int EndY)
{
char far *p,*EndP;
char c=' ';
int attr=7; /*清屏的颜色属性设为白色*/
p=(char far *)0xb8000000; /*显示缓存区首址*/
p=p+StartX*160+StartY*2;/*计算清屏区域*/
EndP=p+(EndX-StartX)*160+(EndY-StartY)*2;
for (;p<=EndP;p+=2) /*将指定区域清屏*/
{
*p=c;
*(p+1)=attr;
}
}
1.在TC环境下编译运行正确,但在VC++6.0下出现错误:error C4226: nonstandard extension used : 'far' is an obsolete keyword.为了消除错误,我加入了头文件#include<windows.h>,此时编译连接无错误,但无法运行!为什么?
2.graphics库中的putpixel函数是怎样实现画像素的,可以自己写一个函数实现该功能么?
3.谢谢!
答案:直接写屏么。0xb8000000在DOS中是显示缓存。TC是在模拟DOS环境中运行。Windows下,VC的控制台也没有真正模拟DOS环境吧。在VC中实现,你需要获得显存的物理地址,需要进入0环。你还要检索VirtualAlloc。现在即便开发游戏都很少用了。
其他:vc6不支持graphics里的函数
可加Q群:219578323 色鬼色鬼色鬼色鬼色鬼岁
上一个:vc榨装zy尚记氺
下一个:关于VC++