该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/* DOS西文输出16点阵汉字的一种方法:(要找个汉字库放在其目录下) */
#include
#include
#include
#include
FILE *fp;
void InitGra(void);
int OpenLIB(void);
void Quit(void);
void PutCC16(int,int,int,int,char *Srt);
void ErrMsg();
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
int main(void)
{
char *Str ="西文下,显示16点阵汉字abcde ABCD。■△◇〓";
InitGra();
if ( !OpenLIB() ) ErrMsg();
PutCC16(0, 100, 2, YELLOW, Str);
getch();
Quit();
return(0);
}
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void InitGra(void)
{
int Gdriver,Gmode;
Gdriver = VGA;
Gmode = VGAHI;
initgraph(&Gdriver,&Gmode,"");
}
//
int OpenLIB(void)
{
if ( (fp=fopen("f:\\hzk\\hzk16", "rb")) == NULL) return(0);
return(1);
}
//
void Quit(void)
{
closegraph();
fcloseall();
exit(0);
}
//
void PutCC16(int x, int y, int Wid, int Color, char *Str)
{
unsigned Zcode, Bcode;
int i, j, k, Rec;
long Len;
char Buf[32];
while (*Str)
{
if ((*Str&0x80) && (*(Str+1) & 0x80))
{
Zcode = (*Str-0xa1) & 0x07f;
Bcode = (*(Str+1)-0xa1) & 0x07f;
Rec = Zcode*94+Bcode;
Len = Rec*32L;
fseek(fp, Len, SEEK_SET);
fread(Buf,1,32,fp);
for (i=0; i<16; i++)
for (j=0; j<2; j++)
for (k=0; k<8; k++)
if (Buf[i*2+j]>>(7-k)&1)
putpixel(x+j*8+k, y+i, Color);
x = x+16+Wid;
Str += 2;
}
}
return;
}
//
void ErrMsg()
{
printf("Open LIB File Error!");
getch();
Quit();
}