该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* 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();

}