图形模式下的汉字显示的C语言源代码.doc

图形模式下的汉字显示的C语言源代码.doc

ID:50836356

大小:39.45 KB

页数:3页

时间:2020-03-15

图形模式下的汉字显示的C语言源代码.doc_第1页
图形模式下的汉字显示的C语言源代码.doc_第2页
图形模式下的汉字显示的C语言源代码.doc_第3页
资源描述:

《图形模式下的汉字显示的C语言源代码.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、图形模式下的汉字显示  我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#includevoidmain(){printf("我正在学习C语言!");}  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。  汉字显示的第一步是打开字库文件。  函数:intOpenHz(co

2、nstchar*Hz16Path);功能:打开字库文件Hz16Pathinthandle;/*打开的字库文件指针*/intOpenHz(constchar*Hz16Path){return(handle=open(Hz16Path,O_RDONLY

3、O_BINARY));}打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。  函数:intWrtHz16(intx,inty,intz,intcolor,char*p);功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(intx,inty,intz,intco

4、lor,char*p){unsignedinti,c1,c2,f=0;/*x,y:writeat(x,y);*/intrec,i1,i2,i3;/*z:spacebetween;*/longl;/*color:txtcolor*/charby[32];/*p:HZstr*/if(handle<0)return-1;while((i=*p++)!=0){if(i>0xa1)if(f==0){c1=(i-0xa1)&0x07f;f=1;}else{c2=(i-0xa1)&0x07f;f=0;rec=c1*94+c2;l=rec*32L;lseek(handl

5、e,l,SEEK_SET);read(handle,by,32);for(i1=0;i1<16;i1++)for(i2=0;i2<2;i2++)for(i3=0;i3<8;i3++)if(GetBit(by[i1*2+i2],7-i3))putpixel(x+i2*8+i3,y+i1,color);x=x+z+16;}}return(x);}函数GetBit定义如下:  函数:intGetBit(unsignedcharc,intn);功能:取得汉字的点阵数据。intGetBit(unsignedcharc,intn){return((c>>n)&1);

6、}汉字显示结束,应该关闭字库文件。voidCloseHz(void){close(handle);}#include"CaicIncludeHz.h"#include#includeconstchar*Hz16Path="\UCDOS\Hzk16.";constchar*HzStr="苦丁香C语言辅助学习软件";voidmain(){intgr=DETECT,gm;initgraph(&gr,&gm,"\Caic\Bgi");OpenHz(Hz16Path);Wrt16Hz(20,20,4,RED,HzStr);CloseHz();getc

7、h();closegraph();}显示24点阵及放大汉字  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。函数:intWrtHz24(intx,inty,intz,intcolor,intm,intn,char*p);功能:显示24点阵及放大汉字。intWrtHz24(intx,inty,intz,intcolor,intm,intn,char*p){unsignedinti,c1,c2,f=0;/*z:汉字字符间的空格*/inti1,i2,i3,i4,i5,rec;/*x,y:先是位置

8、(x,y)*/longl;/*color:汉字颜色*/charby[72];/*m:x方向的放大倍数*//*n:y方向的放大倍数*/if(handle<0)return-1;/*p:显示汉字串*/while((i=*p++)!=0){if(i>0xa1)if(f==0){c1=(i-0xa1)&0x7f;f=1;}else{c2=(i-0xa1)&0x7f;f=0;rec=(c1-15)*94+c2;l=rec*72L;lseek(handle,l,SEEK_SET);read(handle,by,72);for(i1=0;i1<24*m;i1=i1+m

9、)for(i4=0;i4for(i2=0;i2<=2;i2++)for(i3=0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。