📄 mychn.h
字号:
/* ==================================================== */
/* */
/* 学生宿舍管理系统Ver 1.00.1 源代码 */
/* 文件名: MyChn.h */
/* 作用: 负责将字符输出到屏幕,包括中文和标准的ASCII字符 */
/* 主要思路是从点阵文件中读取字符电阵结构,再用描 */
/* 点法在屏幕上描绘出来. */
/* 版权所有 (c) 2007 张元龙 保留所有权利 */
/* */
/* ==================================================== */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <graphics.h>
#ifndef ChnDefined
#define ChnDefined
#define bool char
#define true 1
#define false 0
#define ScrColor DARKGRAY
#define MAXX 639
#define MAXY 479
typedef unsigned char byte;
const byte bit[8]={128,64,32,16,8,4,2,1};
bool AlreadyDestroy=true;
bool AlreadyShow=false;
FILE *FChn; /*汉字字库文件指针*/
FILE *FASC; /*ASCII字库文件指针*/
void WriteASC(char ch,int x,int y,int color){ /*写一个ASCII字符到屏幕上*/
char bitdata[16];
int i,j;
fseek(FASC,ch*16,SEEK_SET);
fread(bitdata,16,1,FASC); /*把该ASCII字模读入到bitdata中*/
for(i=0;i<16;i++)
for(j=0;j<8;j++){ /*和bit[]与操作以后,在屏幕上画点*/
if(bitdata[i]&bit[j]) putpixel(x+j,i+y,color);
}
}
void WriteHZ(unsigned char left,unsigned char right,int x,int y,int color){ /*写一个汉字到屏幕上*/
char bitdata[32];
int i,j;
long fpos;
if (left<161 || right <161) return;
fpos=32L*((left-161)*94+(right-161)); /*获得字模在字库中的位置*/
fseek(FChn,fpos,SEEK_SET);
fread(bitdata,32,1,FChn); /*把该汉字字模读入到bitdata中*/
for(i=0;i<16;i++)
for(j=0;j<8;j++){ /*和bit[]与操作以后,在屏幕上画点*/
if(bitdata[2*i]&bit[j]) putpixel(x+j,y+i,color);
if(bitdata[2*i+1]&bit[j]) putpixel(x+8+j,y+i,color);
}
}
/* ============================================ */
/* 函数名:WriteText */
/* 函数作用: 将文本输出到屏幕(可中英文混合) */
/* 参数: */
/* Text: : 指向文本缓冲区 */
/* x,y : 坐标 */
/* Color : 字符颜色 */
/* ============================================ */
void WriteText(char *Text,int x,int y,int Color){ /*中英文混合输出函数*/
int Len=strlen(Text);
int i;
setcolor(Color);
for (i=0; i<Len; ){
if (Text[i]<0) { /*该字符为汉字字符*/
WriteHZ((unsigned char)Text[i],(unsigned char)Text[i+1],x,y,Color);
x+=16;
i+=2;
} else {
WriteASC(Text[i],x,y,Color);
x+=8;
i++;
}
}
}
void DrawInit(){ /*该函数执行初始化工作*/
static AlreadyInit=false; /*确保初始化工作只执行一次*/
int gdrive=DETECT,gmode;;
if (AlreadyInit) return;
AlreadyInit=true;
registerbgidriver(EGAVGA_driver);
initgraph(&gdrive,&gmode,"");
if((FChn=fopen("Dat\\hzk16","rb"))==NULL){ /*打开16*16点阵汉字字库*/
printf("cannot open file\n");
getch();
exit(0);
}
if((FASC=fopen("Dat\\asc16","rb"))==NULL){ /*打开8*16点阵ASCII字库*/
printf("cannot open file\n");
getch();
exit(0);
}
if (graphresult()!=grOk) {
printf("Error!!!\n");
getch();
exit(0);
}
setviewport(0,0,MAXX,MAXY,0);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -