⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 putccex.c

📁 TC与BC++用户界面程序设计 《Turbo CBorland C++用户界面程序设计》(西安交通大学出版社 周升锋 李立新 等著)的随书软盘
💻 C
字号:
/*
    PutCCEx.C -- 图形方式下显示24点阵放大汉字
*/
#include "stdio.h"
#include "graphics.h"
#include "conio.h"

#define  ST   1
#define  KT   2
#define  FS   3
#define  HT   4

FILE *fp;

void InitGra(void);
int  OpenLIB(int);
void ErrMsg();
void Quit();
void PutCCEx(int, int, int, int, int, int, char *Str);

int main(void)
{
    char *Str = "图形方式下显示24点阵放大汉字";
    InitGra();
    if (! OpenLIB(KT)) ErrMsg();
    PutCCEx(0, 150, 2, 2, 2, YELLOW, Str);
    getch();
    Quit();
    return 0;
}

void InitGra(void)
{
   int GraphMode, DraphDrive = DETECT;
   registerbgidriver(EGAVGA_driver) ;
   initgraph(&DraphDrive, &GraphMode, "") ;
}

void Quit()
{
    fcloseall();
    closegraph();
}

int OpenLIB(int LibNam)
{
   switch(LibNam)
   {
      case ST:
	 if ((fp = fopen("c:\\ucdos\\CLIB24S", "rb")) == NULL) return 0;
	 break;
      case KT:	 if ((fp = fopen("LJ_FILE\HZK24K", "rb")) == NULL) return 0;
	 break;
      case FS:
	 if ((fp = fopen("c:\\ucdos\\CLIB24F", "rb")) == NULL) return 0;
	 break;
      case HT:
	 if ((fp = fopen("c:\\ucdos\\CLIB24H", "rb")) == NULL) return 0;
	 break;
    }
    return 1;
}

void ErrMsg()
{
    printf("Open LIB File Error!");
    getch();
    Quit();
}

/* 放大显示汉字
   x, y: 汉字起点坐标;
   Wid: 汉字间距(象素点数);
   Xt, Yt: X方向和Y方向的放大倍数;
   Color: 汉字的颜色;
   Str: 汉字串;
*/
void PutCCEx(int x, int y, int Wid, int Xt, int Yt, int Color, char *Str)
{
   unsigned  Zcode, Bcode;                    /* 区码, 位码 */
   int   Rec, i1, i2, i3, i4, i5;
   long Len;
   char Buf[72];
   while (*Str)                               /* 直到字串显示完 */
   {
      if ((*Str & 0x80) && (*(Str+1) &0x80))  /* 是汉字 */
      {
	 Zcode = (*Str-0xa1) & 0x07f;          /* 区码 */
	 Bcode = (*(Str+1)-0xa1) & 0x07f;      /* 位码 */
	 Rec = Zcode*94+Bcode;                 /* 记录号 */
	 Len = Rec*72L;                        /* 在字库中位置 */
	 fseek(fp, Len, SEEK_SET);
	 fread (Buf, 1, 72, fp);               /* 72字节 */
	 for (i1 = 0; i1 <  24*Xt; i1 += Xt)
	    for (i4 = 0; i4 <  Xt;  i4++)
	       for (i2 = 0; i2 < 3;  i2++)
		  for (i3 = 0; i3 <  8; i3++)
		    if (Buf[i1/Xt*3+i2] >> (7-i3) & 1)
		       for (i5 = 0; i5 < Yt; i5++)
			 putpixel(x+i1+i4, y+i2*8*Yt+i3*Yt+i5, Color);
	 x = x+24*Xt+Wid;
	 Str += 2;
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -