此方法虽然不是很慎密,但是可以满足普通的字符串换行绘制。
如果有什么好的意见可以留言,我会修改的。
static char m_drawstring[1200];
static char m_drawstringDeco[40][40];
static int m_totallines;
static void DecodeString(char* string,int x, int y, int clipx, int clipy, int clipw, int cliph)
{
char tmpstring[1200] = "";
char* tmpstringp = tmpstring;
int fontw;
unsigned int strLen = 0,len = 0;
unsigned int countperline,totallines,i;
WCHAR * ret;
memset(m_drawstringDeco,0,sizeof(m_drawstringDeco));
len = strlen(string)/2;
strLen = len;
m_totallines = 0;
ret = my_ucs2_string("围");
fontw = vm_graphic_get_string_width (ret);
countperline = clipw / fontw;//此处可能导致宽度不同的字符在一行内空下。
totallines = (strLen / countperline) + ((strLen % countperline > 0)?1:0);
strcpy(tmpstring,string);
strcpy(m_drawstring,tmpstring);
for(i = 0; i < totallines + 1; i ++)
{
m_totallines ++;
if(strLen > countperline)
{
strncpy(m_drawstringDeco[i],tmpstringp,countperline*2);
m_drawstringDeco[i][countperline*2] = '\0';
tmpstringp += countperline*2;
strLen -= countperline;
}
else
{
strncpy(m_drawstringDeco[i],tmpstringp,strLen*2);
m_drawstringDeco[i][strLen*2] = '\0';
break;
}
}
}
static void drawStringEx(char* string,int x, int y, int clipx, int clipy, int clipw, int cliph,int color, int op)
{
int i;
int w,h;
w = 2*vm_graphic_get_character_width(23485);
h = vm_graphic_get_character_height();
h = h+LINEDISTANCE;
if(strcmp(m_drawstring,string) != 0)
{
DecodeString(string,x,y,clipx,clipy,clipw,cliph);
}
for(i = 0; i < m_totallines; i ++)
{
if( y + i * h >= clipy && y + i * h <= clipy + cliph - h)
{
drawString(m_drawstringDeco[i],x,y + i * h,color,op);
}
}
}