本帖最后由 rayaohb 于 2011-9-1 10:43 编辑
希望能早点有个汉字和字符混合显示的方法出来。 19楼得问题现在应该解决了吧?你就是加我QQ的那个吧
xifengsong 发表于 2011-8-26 17:03
typ_CHFont g_CHData16[]=
{
{ASCII_16x8_TAB,"1"},
{CHFont16_Xu,"德"},
{CHFont16_Dian,"州"},
{CHFont16_Chi,"仪"},
{CHFont16_Ya,"器"},
{CHFont16_Temp,"℃"}
}; //其中ASCII_16x8_TAB为所有英文的字库首指针,按照ASCII码排列
混合显示英文汉字 只需要修改string.c 中的GrStringDraw函数,下面给一个汉字16*16 英文16*8的,其实你自己也可以做成通用的
//判断是否为中文
if(sCon.pFont->ucFormat == FONT_CH_STYLE )
{
unsigned char CHFontNum,width,i,m,Colum;
Colum=2;
while(*pcString&&lLength--)
{
if(*pcString=='\n')
{
lY=lY+16;
lX=lXReset;
pcString++;
continue;
}
if(*pcString<128)
width=(sCon.pFont->ucMaxWidth)/2; //英文16x8
else
width=sCon.pFont->ucMaxWidth; //中文16*16
//先画背景 再画前景 这样可以反色显示汉字英文等
sCon.ulForeground=pContext->ulBackground;
for(i=0; i<width; i++)
{
GrLineDrawV(&sCon, lX + i, lY, lY + sCon.pFont->ucHeight);
}
//确定字符在列表中的位置
unsigned char CharIndex,Temp;
if(*pcString<128)
{
Temp=*pcString;
if(*pcString>31) //英文字库按照ASCII排列的
Temp-=32;
CharIndex=0; //英文字符在数组中排在第一个 指向英文字库首指针
}
else
{
for(CHFontNum=0;CHFontNum<sCon.pFont->pusOffset[0];CHFontNum++)
{
if((sCon.pFont->CHFontdata[CHFontNum].Index[0]==pcString[0])&&
(sCon.pFont->CHFontdata[CHFontNum].Index[1]==pcString[1]))
{
CharIndex=CHFontNum; //汉字在数组中的位置
Temp=0;
}
}
}
for(m=0; m<Colum; m++)
{
for(i=0; i<width; i++)
{
lIdx=1;
lBit=0;
while(lBit<9)
{
if(sCon.pFont->CHFontdata[CharIndex].Msk[Temp*width*Colum+i+m*width]&lIdx)
{
sCon.ulForeground=pContext->ulForeground;
GrPixelDraw(&sCon,lX+i,lY+lBit+8*m);
}
lIdx=lIdx<<1;
lBit++;
}
}
}
lX=lX+width;
if(*pcString<128)
pcString+=1;
else
pcString+=2;
}
} |