📄 bgi_gb.cpp
字号:
// BGI_GB.cpp: implementation of the CBGI_GB class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BGI_GB.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
LPWORD CBGI_GB::pBIGTable=NULL;
LPWORD CBGI_GB::pGBTable=NULL;
HGLOBAL CBGI_GB::hGBTable=NULL;
HGLOBAL CBGI_GB::hBIGTable=NULL;
void CBGI_GB::Release()
{
UnlockResource(hGBTable);
FreeResource(hGBTable);
UnlockResource(hBIGTable);
FreeResource(hBIGTable);
pBIGTable=NULL;
pGBTable=NULL;
hGBTable=NULL;
hBIGTable=NULL;
}
CBGI_GB::CBGI_GB()
{
if(pGBTable==NULL)
{
hRes=FindResource(NULL,"GBTOBIG",RT_RCDATA);//IDR_GBTOBIG
hGBTable=LoadResource(0,hRes);
pGBTable=(LPWORD)LockResource(hGBTable);
if(pGBTable==NULL)
AfxMessageBox("fail to load GB2BIG Resource");
}
//locate the resource of "BIGTOGB" 定位资源 "BIGTOGB"
if(pBIGTable==NULL)
{
hRes=FindResource(NULL,"BIGTOGB",RT_RCDATA);
hBIGTable=LoadResource(0,hRes);
pBIGTable=(LPWORD)LockResource(hBIGTable);
if(pBIGTable==NULL)
AfxMessageBox("fail to load Big2GB Resource");
}
///////////////////////////////////////////////////////////
m_strLine.SetSize(0);
m_text="\n";
}
CBGI_GB::~CBGI_GB()
{
}
long CBGI_GB::CalLineNumber()
{
m_strLine.SetSize(0);
CString strTemp;
BOOL bReturn=FALSE;
if(!m_text.GetLength())
return 0;
long line_num=0;
int index=0;
do
{
TCHAR c=m_text.GetAt(index++);
if(c=='\t')
strTemp+=" ";
else if(c!='\n')
strTemp+=c;
else
{
bReturn=TRUE;
line_num++;;
m_strLine.Add(strTemp.Left(strTemp.GetLength()-1));
strTemp="\0";
}
}
while(index<m_text.GetLength());
if(!bReturn)
m_strLine.Add(strTemp);
return m_strLine.GetSize();
}
CString CBGI_GB::BigtoGB(CString text)
{
if(text=="") text+="\n";
else
if(text[text.GetLength()-1]!=10)
{
text+=13;
text+=10;
}
m_text=text;
m_objtext="";
if(m_text=="\n")
return "";
m_lineNumber=CalLineNumber();
for(int Line=0;Line<m_lineNumber;Line++)
{
BYTE* SourceSTR;
SourceSTR=(BYTE* )((LPCTSTR)m_strLine[Line]);
int size=m_strLine[Line].GetLength();
if(size)
{
BYTE* DestSTR=new BYTE[size+1];
unsigned i=0;
do
{
// is English 是英文字符
if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0x40))
{
DestSTR[i]=SourceSTR[i];
i++;
}
else //是BIG5的汉字码
{
DestSTR[i+1]=HIBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
DestSTR[i]=LOBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
i+=2;
}
}
while(i<strlen((char*)(SourceSTR)));
DestSTR[i]='\0';
m_strLine[Line]=DestSTR;
m_objtext+=DestSTR;
delete DestSTR;
}
}
return m_objtext;
}
CString CBGI_GB::GBtoBig(CString text)
{
if(text=="") text+="\n";
else
if(text[text.GetLength()-1]!=10)
{
text+=13;
text+=10;
}
m_text=text;
m_objtext="";
if(m_text=="\n")
return "";
m_lineNumber=CalLineNumber();
for(int Line=0;Line<m_lineNumber;Line++)
{
BYTE* SourceSTR;
SourceSTR=(BYTE* )((LPCTSTR)m_strLine[Line]);
int size=m_strLine[Line].GetLength();
if(size)
{
BYTE* DestSTR=new BYTE[size+1];
unsigned i=0;
do
{
// is English 是英文字符
if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0xA1))
{
DestSTR[i]=SourceSTR[i];
i++;
}
else if(SourceSTR[i]>0xA1&&SourceSTR[i]<0xB0) //是GB2312的汉字码
{
DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
i+=2;
}
else
{
DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
i+=2;
}
}
while(i<strlen((char*)(SourceSTR)));
DestSTR[i]='\0';
m_strLine[Line]=DestSTR;
m_objtext+=DestSTR;
delete DestSTR;
}
}
return m_objtext;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -