📄 charset.cpp
字号:
#include "gos.h"
#include "charset.h"
static const BYTE m_fntEngDat[][16]={
{0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},//! 21
{0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//" 22
{0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00},//# 23
{0x00,0x18,0x18,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x66,0x3C,0x18,0x18,0x00,0x00},//$ 24
{0x00,0x00,0x0E,0x1B,0x5B,0x6E,0x30,0x18,0x0C,0x76,0xDA,0xD8,0x70,0x00,0x00,0x00},//% 25
{0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x06,0xF6,0x66,0x66,0xDC,0x00,0x00,0x00,0x00},//& 26
{0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//' 27
{0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00},//( 28
{0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00},//) 29
{0x00,0x00,0x00,0x00,0x00,0x6C,0x38,0xFE,0x38,0x6C,0x00,0x00,0x00,0x00,0x00,0x00},//* 2A
{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},//+ 2B
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x30,0x18,0x00,0x00},//, 2C
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//- 2D
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00},//. 2E
{0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00},/// 2F
{0x00,0x00,0x00,0x78,0xCC,0xEC,0xEC,0xCC,0xDC,0xDC,0xCC,0x78,0x00,0x00,0x00,0x00},//0 30
{0x00,0x00,0x00,0x30,0x38,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00},//1 31
{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,0x00,0x00,0x00},//2 32
{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x38,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//3 33
{0x00,0x00,0x00,0x0C,0x0C,0x6C,0x6C,0x6C,0x66,0xFE,0x60,0x60,0x00,0x00,0x00,0x00},//4 34
{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x60,0x60,0x30,0x1E,0x00,0x00,0x00,0x00},//5 35
{0x00,0x00,0x00,0x38,0x18,0x0C,0x3E,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//6 36
{0x00,0x00,0x00,0x7E,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},//7 37
{0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x3C,0x76,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//8 38
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x7C,0x30,0x18,0x1C,0x00,0x00,0x00,0x00},//9 39
{0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00},//: 3A
{0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x38,0x38,0x30,0x18,0x00,0x00},//; 3B
{0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00},//< 3C
{0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//= 3D
{0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00},//> 3E
{0x00,0x00,0x00,0x3C,0x66,0x66,0x30,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},//? 3F
{0x00,0x00,0x00,0x7E,0xC3,0xC3,0xF3,0xDB,0xDB,0xF3,0x03,0xFE,0x00,0x00,0x00,0x00},//@ 40
{0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//A 41
{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},//B 42
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//C 43
{0x00,0x00,0x00,0x1E,0x36,0x66,0x66,0x66,0x66,0x66,0x36,0x1E,0x00,0x00,0x00,0x00},//D 44
{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x06,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//E 45
{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//F 46
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x06,0x76,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//G 47
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//H 48
{0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00},//I 49
{0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//J 4A
{0x00,0x00,0x00,0x66,0x66,0x36,0x36,0x1E,0x36,0x36,0x66,0x66,0x00,0x00,0x00,0x00},//K 4B
{0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//L 4C
{0x00,0x00,0x00,0xC6,0xC6,0xEE,0xD6,0xD6,0xD6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00},//M 4D
{0x00,0x00,0x00,0xC6,0xC6,0xCE,0xDE,0xF6,0xE6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00},//N 4E
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//O 4F
{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//P 50
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x30,0x60,0x00,0x00},//Q 51
{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x36,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//R 52
{0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x66,0x3C,0x00,0x00,0x00,0x00},//S 53
{0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},//T 54
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//U 55
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},//V 56
{0x00,0x00,0x00,0xC6,0xC6,0xC6,0xD6,0xD6,0xD6,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00},//W 57
{0x00,0x00,0x00,0x66,0x66,0x2C,0x18,0x18,0x34,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//X 58
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},//Y 59
{0x00,0x00,0x00,0x7E,0x60,0x60,0x30,0x18,0x0C,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//Z 5A
{0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00},//[ 5B
{0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00},//\ 5C
{0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00},//] 5D
{0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//^ 5E
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00},//_ 5F
{0x00,0x1C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//` 60
{0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//a 61
{0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},//b 62
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00},//c 63
{0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//d 64
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x06,0x06,0x3C,0x00,0x00,0x00,0x00},//e 65
{0x00,0x00,0x00,0x78,0x0C,0x0C,0x0C,0x7E,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},//f 66
{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x3E,0x00},//g 67
{0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//h 68
{0x00,0x00,0x18,0x18,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},//i 69
{0x00,0x00,0x30,0x30,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x1E,0x00},//j 6A
{0x00,0x00,0x00,0x06,0x06,0x66,0x66,0x36,0x1E,0x36,0x66,0x66,0x00,0x00,0x00,0x00},//k 6B
{0x00,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},//l 6C
{0x00,0x00,0x00,0x00,0x00,0x7E,0xD6,0xD6,0xD6,0xD6,0xD6,0xC6,0x00,0x00,0x00,0x00},//m 6D
{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//n 6E
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//o 6F
{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00},//p 70
{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00},//q 71
{0x00,0x00,0x00,0x00,0x00,0x66,0x76,0x0E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//r 72
{0x00,0x00,0x00,0x00,0x00,0x7C,0x06,0x06,0x3C,0x60,0x60,0x3E,0x00,0x00,0x00,0x00},//s 73
{0x00,0x00,0x00,0x0C,0x0C,0x7E,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x00,0x00,0x00,0x00},//t 74
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//u 75
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},//v 76
{0x00,0x00,0x00,0x00,0x00,0xC6,0xD6,0xD6,0xD6,0xD6,0x6C,0x6C,0x00,0x00,0x00,0x00},//w 77
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00},//x 78
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x30,0x18,0x0F,0x00},//y 79
{0x00,0x00,0x00,0x00,0x00,0x7E,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,0x00,0x00,0x00},//z 7A
{0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00},//{ 7B
{0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00},//| 7C
{0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00},//} 7D
{0x00,0x00,0x00,0x8E,0xDB,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//~ 7E
};
static const CHARSECT m_fntEngInd[]={{'!','~',m_fntEngDat}};
const FONTFACE g_fntEng={'en'|FONTTYPE_MONOSPACED,m_fntEngInd,1,8,16,16};
DWORD CCharSet::GetCharType(DWORD nCode)
{
if(nCode>='a' && nCode<='z')
return 0;
if(nCode>='A' && nCode<='Z')
return 0;
return CHARTYPE_WORDBREAK;
}
DWORD CCharSet::ParseText(LPCTSTR& pText)
{
return *pText++;
}
DWORD CCharSet::Translate(DWORD nCode,BOOL bToSystem)
{
return nCode;
}
int CCharSet::GetTextLength(LPCTSTR pText)
{
if(pText)
{
int i=0;
while(ParseText(pText))i++;
}
return 0;
}
CFontFace::CFontFace()
{
m_ff=g_fntEng;
}
int CFontFace::GetCharWidth(DWORD nCharCode,int nFontSize)
{
CSize size;
size.cx=m_ff.nWidth;
size.cy=m_ff.nHeight;
if(nFontSize!=size.cy)
{
size.cx*=nFontSize;
size.cx+=size.cy>>1;
size.cx/=size.cy;
}
return size.cx;
}
PBYTE CFontFace::FindChar(DWORD nCharCode)
{
int nOffset,i=m_ff.nSectSize;
while(i--)
{
if(nCharCode>=m_ff.pSect[i].nMinChar &&
nCharCode<=m_ff.pSect[i].nMaxChar)
{
nOffset=nCharCode-m_ff.pSect[i].nMinChar;
nOffset*=m_ff.nFontBytes;
return PBYTE(m_ff.pSect[i].pData)+nOffset;
}
}
return NULL;
}
void CFontFace::DrawFont(FFDRAWARG& pv)
{
CROP* pBkRop=pv.pBkRop;
int x,w,nBit,nData,dx;
pv.y*=m_ff.nWidth;
if(pv.sd.cx==pv.sfd.cx && pv.sd.cy==pv.sfd.cy)
{
while(--pv.h>=0)
{
for(x=pv.y+pv.x,w=pv.w;w>0;x++,w--)
{
nData=x>>3;
nBit=1<<(x&7);
nData=*(pv.pData+nData);
if(nData & nBit)
pv.rp.ROP(pv.rp);
else if(pBkRop)
{
pBkRop->MoveTo(pv.rp.GetPosition());
pBkRop->ROP(*pBkRop);
}
pv.rp.StepCol();
}
pv.nPos=pv.rp.StepRow(pv.nPos);
pv.y+=m_ff.nWidth;
}
}
else
{
while(--pv.h>=0)
{
for(dx=pv.nDxSum,x=pv.y+pv.x,w=pv.w;w>0;w--)
{
nData=x>>3;
nBit=1<<(x&7);
nData=*(pv.pData+nData);
if(nData & nBit)
pv.rp.ROP(pv.rp);
else if(pBkRop)
{
pBkRop->MoveTo(pv.rp.GetPosition());
pBkRop->ROP(*pBkRop);
}
pv.rp.StepCol();
dx+=pv.sfd.cx;
while(dx>=0)
{
x++;
dx-=pv.sd.cx;
}
}
pv.nPos=pv.rp.StepRow(pv.nPos);
pv.nDySum+=pv.sfd.cy;
while(pv.nDySum>=0)
{
pv.y+=m_ff.nWidth;
pv.nDySum-=pv.sd.cy;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -