原文请看http://blog.21ic.com/user1/1505/archives/2008/52981.html
发现了几个不明确的地方:
1,代码决定是否GdConvertEncoding()的处理中并没有MWTF_DBCS_EUCCN,所以需要添上MWTF_DBCS_EUCCN.
2,*ostr16++ = Unicode[row-0xA0][col-0xA0];并不能正确定位到汉字上,行数需要再减去16.原作者的另一篇**中(http://blog.21ic.com/user1/1505/archives/2008/53035.html)也说明了.
3,IsGB变量判断,我没有找到好办法.我的办法是如果计算出来的行数或列出出现负值的话,则IsGB=false.并且使用 *ostr16++ = (unsigned short)ch;进行处理.
代码如下:
case MWTF_UC16:
if(IsGB)
{
unsigned char row,col;
int t_row,t_col;
row = ch >> 8 ;
col = ch & 0x00ff;
t_row=row-0xA0-16;
t_col=col-0xA0;
if(t_row<1 || t_col<1)
{
printf("[devfont.c]error row:%d , col:%d\n", t_row,t_col);
if(t_row<1)
{
t_row=0;
}
if(t_col<1)
{
t_col=0;
}
IsGB=0;
}
if(IsGB)
{
*ostr16++ = Unicode[t_row][t_col];
}
}
if(!IsGB)
{
*ostr16++ = (unsigned short)ch;
}
break;
=========================
经过以上修补和处理后,能正确显示simhei.ttf的字体,并且也能显示数字和字母. |