选择“超级工具集”->“点阵字模工具”,好好看一下就应当有所收获。
如何在纯c语言中显示汉字(含源代码)
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
/*************************************************************************************
在许多C程序设计中,要用到汉字进行提示或人机交互,而现行的Turbo C集成开发环境不是汉化的,
如何编制能显示汉字的C程序呢?
下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。
国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中
有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,
一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)
表示,对应在屏幕上显示出来,就是相应的汉字。
由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,
从字库中找到对应的汉字,将其字模显示即可。
内码转换成区位码方法如下:
qh=c1-0xa0 wh=c2-0xa0
其区位码就是:
qw=qh*0xff+wh
该汉字在字库中离起点的位置是:
offset=(94*(qh-1)+(wh-1))*32L
*************************************************************************************/
void main()
{
int x,y ;
char *s="汉字显示程序";
int ROW = 2 ;
int COL = 2 ;
FILE *fp;
char buffer[32];
register m,n,i,j,k;
unsigned char qh , wh ;
unsigned long offset ;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
if((fp=fopen("HZK16","rb"))==NULL)
{
printf("Can not Open Hzk16,Please add it");
getch();
closegraph();
exit(0);
}
x = 20 ; y = 100 ;
while(*s)
{
qh=*s - 0xaf ; /* 此处-0xaf是因为该处是18030汉字库 ,如果是ucdos字库或者2312字库则用-0xa0 */
wh=*(s + 1) -0xa0 ;
offset=(94 * (qh-1 ) + ( wh - 1 ) ) * 32L ;
fseek(fp,offset,SEEK_SET);
fread(buffer , 32 , 1 , fp ) ;
for( i = 0 ; i < 16 ; i++ )
for(n = 0 ; n < ROW ; n++)
for(j = 0 ; j < 2 ; j++ )
for(k = 0 ; k < 8 ; k++)
for(m = 0 ; m < COL ; m++)
if(((buffer[i*2+j] >> ( 7 - k )) & 0x01 ) != NULL )
putpixel(x + 8* j * COL + k * COL + m ,y + i * ROW + n ,GREEN ) ;
s += 2 ;
x += 30 ;
}
getch() ;
getch() ;
getch();
closegraph() ;
}