网上搜半天都没有现成的源代码,而且aspjpeg的.Canvas.PrintTextEx对包含汉字的字符串换行功能完全无效,被迫写了本程序。该程序可对文本文件中的中文字符进行自动换行,主要解决了2个问题:1是不对汉字进行截断,不会造成汉字乱码;2是原来文本中的回车换行如何处理。时间仓促写得不好,高手莫笑。本程序的例子是在图片中试题的截断显示,点击这里。
程序设计依据:GB2312的每一个汉字由两个字节构成,其中每一个字节的范围都在0xA1-0xFE。使用方法:函数参数str是需要换行的字符串,len是自动换行的最大长度。
#define MAX_LINE_BUF 4096
char g_src[MAX_LINE_BUF],g_dst[MAX_LINE_BUF];
char * add_return(char * str, int len)
{
unsigned char * pu;
char * s, *d;
g_dst[0]=0;
s=str;d=g_dst;memset(g_dst,0,MAX_LINE_BUF);
for(int i=0;i<strlen(str);i++)
{
int j,return_now=0;
for(j=0;j<len && *s!=0;)
{
if(*(s)=='\r')
{
s++;j++;
continue;
}
else if(*(s)=='\n')
{
*d=*s;j++;s++;d++;
return_now=1;
continue;
}
*d=*s;
pu=(unsigned char *)s;
// 判断是否是汉字,是汉字则拷贝双字节
if(*pu>=0xA1 && *pu<=0xFE)
{
j++;
s++;d++;
*d=*s;
}
j++;s++;d++;
}
i+=j;
if(!return_now)
{
*d='\n';d++;
}
}
return g_dst;
}
|