time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > 直接写屏显示文字

直接写屏显示文字

时间:2009-09-20 23:31 点击:615次 字体:[ ]




看到有前(钱)人发表了DOS下的东西,咱也凑凑热闹,把毕业设计时用过的一个小东西也拿出来晾晾,别霉了!

    这是一个DOS下直接写屏显示16点阵汉字的演示程序
    功能由函数OutText()完成,该函数区别于大多数此类函数的特点如下
    .支持视区剪裁输出
    .支持屏幕任意位置输出(不局限于一般直接写屏方法640X480分辩率下的输出位置必须为8的整数倍)
    .支持英文字母及数字的8X16点阵输出
    .支持直接写屏下的彩色汉字输出

    演示起见,未加入将字库读入XMS内存,并从XMS内存读取字模的代码,因此纯DOS下运行可能会频繁的读硬盘。
    要得到有XMS支持的直接写屏功能,可查看EGL程序源代码。
    (2001.10.13日注:这个EGL是学校时做的一个DOS下仿Window3.1的界面库(Easy Graphics Library)。很完整,菜单,对话框,鼠标,键盘,图形下闪烁光标,可移动窗口,XMS,动画,位图,编辑控制,检查框,单选钮,push按钮等等,都支持,现在看看那时真是狂热,没有配套磁盘的书中的例子,就用手硬敲。刚才我又大略看了一遍,真是TMD破腚百出,哎,都是过去的事了)
    废话说了一大堆,又发了点小感慨,说正题吧,下面是代码,格式为了对齐,把tab全换成了空格,多见谅吧,可执行文件目录下需要hzk16与asc16两个字库文件(ucdos自带)及EGAVGA.BGI这个老东西,如果你硬盘上无这些东西,那请到http://www.csdn.net/filebbs/read_topic.asp?id=677下载打包后文档

    补充一句吧,CSDN上卧虎藏龙,小人这点小代码牛人就见怪不怪吧,如果实在不痛快,以后在街上看到我就狗血喷头的骂一顿吧,在这先谢罪了

                                                                                                                           MSVCer(家宝)

    /*
    OutText.C,Turbo C 2.0
    WangJiaBao Create
    ShenYang Electric Power Institute,1997.09.19
    */
    /*
    WangJiaBao Modify for friend
    ShenYang Thermo Power Plant,2001.04.20
    */
    /*
    WangJiaBao Modify for CSDN
    ShenYang Thermo Power Plant,2001.10.13
    */

    #include "dos.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "graphics.h"

    FILE *fp_hzk,*fp_asc;
    /*
    OutText()各参数意义:
    x 字符串x轴坐标
    y 字符串y轴坐标
    color 字符串颜色
    hz 字符串地址
    */
    void OutText(int x,int y,unsigned char color,unsigned char *hz);

    main()
    {
        int gd=VGA,gm=VGAHI;
        int x,y,len,color,y8X8=2,y8X16=16,bottom=447;
        int wl=120,wt=100,wr=520,wb=315; /* 视区坐标 */
        unsigned long times=1,time1=0,time2=0;
        unsigned char tmpstr[100],\
            *errorhzk="\nError open hzk16\a",\
            *errorasc="\nError open asc16\a",\
            *goon="任意键继续演示",\
            *viewport="演示OutText()函数的视区显示能力",\
            *demoviewstr="在视区(%d,%d,%d,%d)内显示汉字,起点坐标为X=%d Y=%d",\
            *fonts="比较8x8与8x16两种点阵ASCII码字符的输出效果",\
            *hello="小人向各位CSDN的朋友问好",\
            *report="%lu秒输出句子%lu次.",\
            *enddemo="演示OutText()函数的高速写屏能力,任意键结束演示";

        if( (fp_hzk=fopen("hzk16","rb"))==NULL ){ /* 打开16*16点阵汉字库文件 */
            printf(errorhzk);
            exit(1);
        }
        if( (fp_asc=fopen("asc16","rb"))==NULL ){ /* 打开ASCII码8*16点阵文件 */
            printf(errorasc);
            fclose(fp_hzk);
            exit(1);
        }
        initgraph(&gd,&gm,"");

        /* 1.演示OutText()函数的全屏输出及视区显示能力 */
        setfillstyle(WIDE_DOT_FILL,BLUE);
        bar(0,0,639,479);
        setfillstyle(SOLID_FILL,WHITE);
        bar(wl,wt,wr,wb);
        setviewport(wl,wt,wr,wb,1); /* 定义视区 */
        for(x=y=0;x<=15;x++,y+=16){
            sprintf(tmpstr,demoviewstr,wl,wt,wr,wb,x,y);
            OutText(x,y,BLUE,tmpstr);
        }
        setviewport(0,0,639,479,1); /* 重置视区 */
        OutText(320-strlen(viewport)*4,60,YELLOW,viewport);
        OutText(320-strlen(goon)*4,80,LIGHTCYAN,goon);
        getch();
 



本文地址 : http://www.fengfly.com/plus/view-77276-1.html
标签: 显示文字
------分隔线----------------------------
相关文章
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:
本栏分类