📄 go.c
字号:
{
k=2;
addr=(long)((TextFont[0]-0xa1)*94+(TextFont[1]-0xa1))*32;
fseek(fhz16,addr,SEEK_SET);
fread(FONT_BUF,1,32,fhz16); //读取字库
}
else //是字符
{
addr=(long)(TextFont[0])*16;
fseek(fasc16,addr,SEEK_SET);
fread(FONT_BUF,1,16,fasc16); //读取字库
}
return k; */
// BC++3.1用
unsigned TempFont,TFont;
int k = 1;
if (TextFont[0] >= 0xa0) //是汉字
{
TFont = *(unsigned *) TextFont;
}
else
{
TFont = (unsigned) * TextFont;
}
if (TFont & 0xff00) //是汉字
{
k = 2;
TempFont = (TFont << 8) & 0xff00;
TempFont |= (TFont >> 8) & 0x00ff;
}
else //是字符
{
TempFont = TFont & 0x00ff;
}
reg.x.dx = TempFont;
int86x(0x7f, ®, ®, &sreg);
// if(reg.x.cflag)
movedata(reg.x.dx, 0, FontSeg, FontOff, k * 16);
return k;
}
/*把汉字字模传到显示缓冲区
sx,sy-缓冲区的位置
LineStyle-字模数据的地址
n-字模行数 */
void Put(int sx, int sy, unsigned char *LineStyle, int n)
{
int lsx, lst, j, k;
char c;
unsigned char n1,n2;
if (sx > 631)
{
return;
}
lsx = sx % 8,lst = sx / 8;
k = sy * 80 + lst;
outp(0x3ce, 0);
outp(0x3cf, FontColor);
outp(0x3ce, 1);
outp(0x3cf, 0xff);
outp(0x3ce, 3);
outp(0x3cf, FWriteMode);
outp(0x3c4, 2);
outp(0x3c5, 0xff);
if (lsx) //不是整字节开始
{
for (j = 0; j < n; j++)
{
n1 = (unsigned char) (LineStyle[j] >> lsx),
n2 = (unsigned char) (LineStyle[j] << (8 - lsx));
outp(0x3ce, 8);
outp(0x3cf, n1);
seeseg = (unsigned char _based(videoseg) * )k; //地址
c = *seeseg;
*seeseg = c;
outp(0x3ce, 8);
outp(0x3cf, n2);
seeseg = (unsigned char _based(videoseg) * )(k + 1); //地址
c = *seeseg;
*seeseg = c;
k += 80;
}
}
else
{
for (j = 0; j < n; j++)
{
outp(0x3ce, 8);
outp(0x3cf, LineStyle[j]);
seeseg = (unsigned char _based(videoseg) * )k; //地址
c = *seeseg;
*seeseg = c;
k += 80;
}
}
outp(0x3ce, 3);
outp(0x3cf, 0);
outp(0x3ce, 8);
outp(0x3cf, 0xff);
}
int ViewOne16Char(int x, int y, unsigned char *TextFont)
{
int i, k;
unsigned char buf1[16],buf2[16];
k = ReadFont(TextFont);
if (k > 0)
{
if (k == 2) // 汉字
{
for (i = 0; i < 16; i++)
{
buf1[i] = FONT_BUF[2 * i];
buf2[i] = FONT_BUF[2 * i + 1];
}
Put(x, y, buf1, 16);
Put(x + 8, y, buf2, 16);
}
else // 字
{
Put(x, y, FONT_BUF, 16);
}
}
return k;
}
//
int ViewOne24Char(int x, int y, unsigned char *TextFont, int Size)
{
unsigned char c;
unsigned j,i,w = 0,l,s;
c = *TextFont;
if (Size == 48)
{
for (i = 1632; i < 1692; i += 5)
{
if (c == FontBuffer[i])
{
//start
s = (unsigned) FontBuffer[i + 1];
s = s * 256 + (unsigned) FontBuffer[i + 2];
//
l = (unsigned) FontBuffer[i + 3];
l = l * 256 + (unsigned) FontBuffer[i + 4];
w = l / 48;
for (j = 0; j < w; j++)
{
Put(x + j * 8, y, &FontBuffer[s], 48);
s += 48;
}
w = w * 8;
break;
}
}
}
else
{
for (i = 0; i < 13; i++)
{
if (c == FontBufferCal[i])
{
s = 13 + i * 48;
w = 2;
for (j = 0; j < w; j++)
{
Put(x + j * 8, y, &FontBufferCal[s], 24);
s += 24;
}
w = 12;
break;
}
}
}
return w;
}
// 显示字符串
void DrawText(int x, int y, char *String, unsigned char Co, int MaxLine)
{
int Tempx, Tempy;
int Mark = 0, k, Count = 0;
unsigned char TempNum,C[2] =
{
0xff,0xff
};
Tempx = x,Tempy = y;
FontColor = Co;
while (*String)
{
TempNum = *String;
switch (TempNum)
{
case 0x9:
Tempx += 7 * Cowx;
case 0x20:
Tempx += Cowx;
String++;
continue;
case 0x0d:
String++;
case 0x0a:
Tempx = x;
Tempy += Liney;
String++;
break;
case '&':
Mark = 1 - Mark;
String++;
break;
default:
if (MaxLine < 0) //特殊汉字
{
if (MaxLine <= -10)
{
k = ViewOne24Char(Tempx, Tempy, String, 24);
}
else
{
k = ViewOne24Char(Tempx, Tempy, String, 48);
}
Tempx += k;
String++;
}
else
{
k = ViewOne16Char(Tempx, Tempy, String);
if (Mark)
{
Put(Tempx, Tempy + Liney - 4, C, 2);
if (k == 2)
{
Put(Tempx + Cowx, Tempy + Liney - 4, C, 2);
}
Mark = 0;
}
Count += k;
Tempx += k * Cowx;
String += k;
}
break;
}
}
CurX = Tempx,CurY = Tempy;
}
/* DrawTextEx
显示字符串,字符串的宽度被限制在RW的宽度之内
x,y-显示开始的位置
String-字符串
RW-字符串显示的宽度
Co-字符的颜色
AligMent-对齐方式 0-Left,1-Center,2-Right
*/
int __strlen(char *String)
{
int i, Result = 0;
for (i = 0; i < (int) strlen(String); i++)
{
if (String[i] == '\n')
{
break;
}
if (String[i] == '.' || String[i] == '-')
{
Result += 16;
}
else
{
Result += 24;
}
}
return Result;
}
int __strlenex(char *String)
{
int i, Result = 0;
for (i = 0; i < (int) strlen(String); i++)
{
if (String[i] != '&')
{
Result += 8;
}
}
return Result;
}
void DrawTextEx(int x, int y, char *String, int RW, unsigned char Co, int AlignMent)
{
int w;
if (AlignMent <= -10)
{
w = 12 * strlen(String);
}
else if (AlignMent < 0)
{
w = __strlen(String);
}
else
{
w = __strlenex(String);
} //求字符串的长度
switch (AlignMent)
{
case 0:
break;
case 1:
x = x + (RW - w) / 2;
break;
default:
if (RW > w)
{
x = x + RW - w - 3;
}
}
DrawText(x, y, String, Co, AlignMent);
}
//特殊显示函数
void Printf(char *String, unsigned char Co)
{
int Tempx, Tempy, k;
unsigned char TempNum;
Tempx = FontCurX,Tempy = FontCurY;
FontColor = Co;
while (*String)
{
TempNum = *String;
switch (TempNum)
{
case 0x9:
Tempx += 7 * Cowx;
case 0x20:
Tempx += Cowx;
String++;
continue;
case 0x0d:
String++;
case 0x0a:
Tempx = 0;
Tempy += Liney;
String++;
break;
default:
k = ViewOne16Char(Tempx, Tempy, String);
Tempx += k * 8;
String += k;
break;
}
if (Tempx > 639)
{
Tempy += Liney;Tempx = 0;
}
if (Tempy > 468)
{
Tempy -= 18;
MoveScreen(0, 18, 639, 467, 0, 0);
DrawBar(0, 449, 639, 467, clBlack, 0xff);
}
}
FontCurX = Tempx,FontCurY = Tempy;
}
//显示位图
void ShowBitmap(int x, int y, int w, int h)
{
int i;
unsigned char FaceBuffer[2000];
int handle;
handle = open("FDIGI.DAT", O_BINARY | O_RDONLY);
if (handle == -1)
{
printf("Error:%d-%d", errno, EMFILE);
Getkey();
return;
}
read(handle, FaceBuffer, 2000);
close(handle);
FontColor = clBlack;
for (i = 0; i < w / 8; i++)
{
Put(2 + x + i * 8, 2 + y, &FaceBuffer[i * h], h);
}
FontColor = clYellow;
for (i = 0; i < w / 8; i++)
{
Put(x + i * 8, y, &FaceBuffer[i * h], h);
}
FontColor = clGreen;
for (i = 0; i < w / 8; i++)
{
Put(1 + x + i * 8, 1 + y, &FaceBuffer[i * h], h);
}
}
void ShowBitmapEx(void)
{
int i;
unsigned char FaceBuffer[1200];
int handle;
handle = open("JDIGI.DAT", O_BINARY | O_RDONLY);
if (handle == -1)
{
printf("Error:%d-%d", errno, EMFILE);
Getkey();
return;
}
read(handle, FaceBuffer, 1100);
close(handle);
FontColor = clBlack;
for (i = 0; i < 6; i++)
{
Put(364 + i * 8, 304, &FaceBuffer[i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(364 + i * 8, 337, &FaceBuffer[252 + i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(364 + i * 8, 378, &FaceBuffer[504 + i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(364 + i * 8, 411, &FaceBuffer[756 + i * 42], 42);
}
FontColor = clBlue;
for (i = 0; i < 6; i++)
{
Put(363 + i * 8, 303, &FaceBuffer[i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(363 + i * 8, 336, &FaceBuffer[252 + i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(363 + i * 8, 377, &FaceBuffer[504 + i * 42], 42);
}
for (i = 0; i < 6; i++)
{
Put(363 + i * 8, 410, &FaceBuffer[756 + i * 42], 42);
}
}
/* 第四部分:控件 */
/* 本部分包含仿Windows界面的一部份控件,由于MC6.0不是面向对象的,
因此,每一个控件的数据成员使用一个结构来表示,其方法使用函数来实现.*/
//TPanel控件
//显示TPanel空件
void ShowPanel(TPanel *Panel)
{
int Off = 0, sx, sy, ex, ey;
sx = Panel->Left;
sy = Panel->Top;
ex = sx + Panel->Width - 1;
ey = sy + Panel->Height - 1;
//画表面
DrawBar(sx, sy, ex, ey, Panel->Color, 0xff); //实线填充
if (Panel->BorderStyle) //存在
{
Rectangle(sx, sy, ex, ey, clBlack, clBlack);
Off++;
}
if (Panel->BevelOuter) //外
{
Rectangle(sx + Off, sy + Off, ex - Off, ey - Off, clBlack, clWhite);
Off++;
}
if (Panel->BevelInner) //内
{
Rectangle(sx + Off, sy + Off, ex - Off, ey - Off, clWhite, clBlack);
}
}
//TLabel控件
void ShowLabel(TLabel *Label, char *Caption)
{
int sx, sy, ex, ey;
sx = Label->Left;
sy = Label->Top;
ex = sx + Label->Width - 1;
ey = sy + Label->Height - 1;
if (Caption) //如果新的内容不为NULL,更新内容
{
strcpy(Label->Caption, Caption);
}
DrawBar(sx, sy, ex, ey, Label->Color, 0xff); //显示背景
if (Label->Ctrl3D) //3D效果
{
DrawTextEx(sx + 1, sy + 1, Label->Caption, ex - sx + 1, //显示阴影
Label->FontBColor, Label->AlignMent);
}
DrawTextEx(sx, sy, Label->Caption, ex - sx + 1, //显示字符
Label->FontColor, Label->AlignMent);
}
//TEdit控件
void InsertChar(char *s, char c, int Locate) //在字符串
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -