回复 2楼 幽灵X
int gethz16(char incode[],char bytes[])
//由汉字内码,取得区位码,最后将字模存放到bytes中
{
unsigned char qh,wh;//为何用无符字符?
unsigned long offset;
FILE *fp=NULL;
if((fp=fopen("c:\\c_study\\wenjian\\HZK16","rb"))==NULL)//为何用二进制方式打开?
{
puts("cannot open file hzk16,press any key to return");
getch();
closegraph();
return 0;
}
qh=incode[0]-0xa0;
wh=incode[1]-0xa0;
offset=((qh-1)*94+wh-1)*32l;
fseek(fp,offset,0);
fread(bytes,32,1,fp);
fclose(fp);
fp=NULL;
return 1;
}
void dishz16(int x0,int y0,char code[],int color)//图形模式下x0,y0处,用color显示这个区位码所代表的汉字
{
unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//屏蔽字模每行各位的数组;
char mat[32];
register int i,j,x,y,pos;//寄存器变量用途?
gethz16(code,mat);
y=y0;
for(i=0;i<16;++i)
{
x=x0;
pos=2*i;
for(j=0;j<16;++j)
{
if((mask[j%8]&mat[pos+j/8])!=NULL)
putpixel(x,y,color);
++x;
}
++y;
}
}
void dishzc16(int x,int y,char *s,int color)//调用汉字显示函数,显示一个汉字串,s为串指针。
{
while(*s!=NULL)
{
while(x<621&&(*s!=NULL))//后面这个关系表达式必须要。
{
dishz16(x,y,s,color);
x+=16;
s+=2;
}
x=0;y+=20;
}
}
这是一个西文dos下显示中文汉字的模块,我就是用的在主函数中频繁需要调用到这个模块
[
本帖最后由 zamely 于 2013-7-29 17:18 编辑 ]