|
EVC下作HZK16点阵读取,但显示是乱码,英文的读取的出来,郁闷了,请大侠们帮忙看看。
[复制链接]
本人在做在CE下,读取HZK16和ASC16,然后显示点阵图,我是想做中英文都能显示的,现在英文的可以完全显示点阵图,中文的读取时点阵图就显示乱码了,有点急啊。看了很多前辈的文章和所提到的问题。我的模拟器已经是中文的了,而且我也用过WideCharToMultiByte之类的函数了,但还是不行,不知道是我用错了,还是什么的,贴上 大家帮忙看看
void CDianzhenDlg::ProcessChinese()
{
CFile myfile;
//开辟字库缓冲区大小,一个字节8个点
unsigned char Libbuff[POINTER_WIDTH*POINTER_HEIGHT>>3];
unsigned char VerLibbuff[POINTER_WIDTH*POINTER_HEIGHT>>3];
ULONG address;
UCHAR BitIndex;
char th = strinput.GetAt(0);
char tl = strinput.GetAt(1);
//清空显示缓冲区
m_HorizonLib.Empty();
m_VerticalLib.Empty();
//根据汉字内码计算在文件中地址
address = ((th-0xa1)*94+(tl-0xa1))*32;
//打开字库文件
if(!myfile.Open(_T("HZK16"),CFile::typeBinary|CFile::modeReadWrite,NULL))
{
AfxMessageBox(_T("error"));
return ;
}
//读取字模缓冲区
myfile.Seek(address,CFile::begin);
myfile.Read(Libbuff,sizeof(Libbuff));
myfile.Close();
//横排----->竖排
for(int i = 0;i
{
BitIndex = 0x01;
UINT HorizonRow;
UINT HorizonCol;
VerLibbuff = 0;
//找出列号
if(i<(sizeof(VerLibbuff)>>1))
{
HorizonCol = i;
}
else
{
HorizonCol = i - (sizeof(VerLibbuff)>>1);
}
for(int j=0;j<8;j++)
{
//找出行号
if(i<(sizeof(VerLibbuff)>>1))
{
HorizonRow = j;
}
else
{
HorizonRow = j+8;
}
UCHAR temp2 = 0x80;
//找到对应位置位
if(Libbuff[HorizonRow*2+(HorizonCol>>3)]&(temp2>>(HorizonCol%8)))
{
VerLibbuff = VerLibbuff | BitIndex;
}
BitIndex = BitIndex<<1;
}
}
//将字模显示出来
DisplayResult(Libbuff,POINTER_WIDTH,POINTER_HEIGHT);
//显示横排结果
for(i=0;i
{
char temp[3];
unsigned char Value = Libbuff;
if(((i%8)==0)&&(i!=0))
{
m_HorizonLib += "\r\n" ;
}
m_HorizonLib += " 0x" ;
if(Value<16)
{
temp[0] = '0';
_itoa(Value,&temp[1],16);
}
else
{
_itoa(Value,temp,16);
}
m_HorizonLib += temp;
}
//显示竖排结果
for(i=0;i
{
char temp[3];
unsigned char Value = VerLibbuff;
if(((i%8)==0)&&(i!=0))
{
m_VerticalLib += "\r\n" ;
}
m_VerticalLib += " 0x" ;
if(Value<16)
{
temp[0] = '0';
_itoa(Value,&temp[1],16);
}
else
{
_itoa(Value,temp,16);
}
m_VerticalLib += temp;
}
UpdateData(FALSE);
}
|
|