谁有《C 高级实用程序设计》- C程序汉字显示技术 那一章的源代码 C/C / 非技术区 - CSDN社区 community.csdn.net

来源:百度文库 编辑:神马文学网 时间:2024/04/30 13:19:52
UCDOS的汉字库下载:(注意,下载后的文件名可能以txt结尾,但是不是txt文件)
8*16点阵的ASC字库   ASC16
16*16点阵的汉字库   HZK16
24*24点阵的宋体字库   HZK24S
24*24点阵的仿宋体字库   HZK24F
24*24点阵的黑体字库   HZK24H
24*24点阵的楷体字库   HZK24K
24*24点阵特殊字库   HZK24TTop
Kvci(看了不笑就没小JJ同时又比较长的昵称__——————————————————————————————)回复于 2005-10-15 19:29:01 得分 75
图形模式下的汉字显示
作者:unknown   更新时间:   2005-03-13
我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include   void   main(){printf("我正在学习C语言!");}
在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
汉字显示的第一步是打开字库文件。
函数:   int   OpenHz(const   char   *Hz16Path);  功能:打开字库文件Hz16Pathint   handle;   /*打开的字库文件指针*/int   OpenHz(const   char  *Hz16Path){return   (handle=open(Hz16Path,O_RDONLY|O_BINARY));}  打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
函数:   int   WrtHz16(int  x,int   y,int   z,int   color,char   *p);  功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int   x,   int   y,int  z,int   color,char   *p)
{
unsigned   int   i,c1,c2,f=0;   /*x,y:write   at   (x,y);*/
int   rec,i1,i2,i3;   /*z:space   between;*/
long   l;   /*color:txt   color*/
char   by[32];   /*p:HZ   str*/
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(handle,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定义如下:
函数:   int   GetBit(unsigned   char   c,int   n);   功能:取得汉字的点阵数据。
int   GetBit(unsigned   char   c,int   n)
{
return((c>>n)&1);
}
汉字显示结束,应该关闭字库文件。
void   CloseHz(void)
{
close(   handle   );
}
#include   "\Caic\Include\Hz.h"
#include
#include   const   char*   Hz16Path   =   "\\UCDOS\\Hzk16.";
const   char*   HzStr   =   "苦丁香C语言辅助学习软件";
void   main(){
int   gr=DETECT,gm;
initgraph(&gr,&gm,"\\Caic\\Bgi");
OpenHz(   Hz16Path   );
Wrt16Hz(20,20,4,RED,HzStr);
CloseHz();
getch();
closegraph();
}显示24点阵及放大汉字
下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
函数:   int   WrtHz24(int   x,int   y,int   z,int   color,int   m,\int   n,char   *p);   功能:显示24点阵及放大汉字。
int   WrtHz24(int   x,int   y,int   z,int   color,int   m,int   n,char   *p)
{
unsigned   int   i,c1,c2,f=0;   /*z:   汉字字符间的空格*/
int   i1,i2,i3,i4,i5,rec;   /*x,y:   先是位置(x,y)*/
long   l;   /*color:汉字颜色*/
char   by[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)
for(i4=0;i4   for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(GetBit(by[i1/m*3+i2],7-i3))
for(i5=0;i5   putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
x=x+24*m+z;
}
}
return(x);
}   使用Wrt24Hz的例子:#include   "\Caic\Include\Hz.h"
#include
#include   const   char*   Hz24Path   =   "C:\\Ucdos\\fnt\\hzk24s."
const   char*   HzStr   =   "苦丁香C语言辅助学习软件";
void   main(){
int   gr=DETECT,gm;
initgraph(&gr,gm,"\\Caic\\Bgi");
OpenHz(   Hz24Path   );
Wrt24Hz(20,20,   /*先是在(x,y)*/
4,   /*汉字间的空格为4*/
RED,   /*用红色显示*/
2,   /*x   方向放大2倍*/
4,   /*y   方向放大4倍*/
HzStr);   /*显示字符串*/
CloseHz();
getch();
closegraph();
}
谁有《C 高级实用程序设计》- C程序汉字显示技术 那一章的源代码 C/C / 非技术区 - CSDN社区 community.csdn.net C程序汉字显示技术 那一章的源代码 C/C 请问各位大侠:C++的异常处理(try、catch、throw)与C语言的Setjmp()、Longjmp()机制有什么区别?非常感谢! C/C / C 语言 - CSDN社区 community.csdn.net 华为笔试过了,面试时又出了一道题 C/C / C语言 - CSDN社区 community.csdn.net 如何保存SQL的money类型数据。 .NET技术 / VB.NET - CSDN社区 c... NET(C#)连接各类数据库-集锦 - .net - CSDN技术中心 gzip压缩算法 - c/c - CSDN技术中心 C程序源代码1 白话C#:反射-.NET技术-dotnet技术 C程序源代码(3)rthrthrth 哪里有大量的C 源代码下载? CSDN技术中心 1.1 什么是编程语言:如何像计算机专家一样思考(C 版) CSDN技术中心 1.1 什么是编程语言:如何像计算机专家一样思考(C 版) C 的可移植性和跨平台开发[3]:异常处理 - 【编程随想】的技术博客 - CSDN博客 50个C/C++源代码网站 - 镜花水月 - JavaEye技术网站 C与C 语言之争:网友观点争论精彩语录之二 , 语言,程序员,linus,网友,模块,抽象,设计,观点,接口,程序, , - CSDN 新闻 简单的C程序 pthread_cond_signal()的具体位置? - C/C - ChinaUnix.net 敏捷软件开发11个原则 - (Java/C/Php/C /.NET) (OS,DB,Web,Net,Graph,Game) - CSDN博客 一个典型的C程序存储空间布局 - C/C 如何拖动没有标题栏的窗体?? Delphi / VCL组件开发及应用 - CSDN社区 c... C语言宏的学习: - henry19850318的专栏 - CSDN博客 C语言宏的学习: - henry19850318的专栏 - CSDN博客 异常处理 - [C++] - guomei的专栏 - CSDN博客