// ----------------------自动折行=========================//
加入头文件
#include <string.h>
#include <stdlib.h>
和estlib.lib 库
// ----------------------自动折行=========================//
typedef TBuf<60> TBufCH;
CArrayFixFlat<TBufCH>* FormatUnicodeTxt(const HBufC* abuf,int aMaxWid,const CFont& aFt)
{
if(abuf&&abuf->Length()>0)
{
CArrayFixFlat<TBufCH>* lineTxts=new (ELeave)CArrayFixFlat<TBufCH>(4);
if(lineTxts)
{
CleanupStack::PushL(lineTxts);
TInt wids=0;
TBool wrap=EFalse;
TInt index0=0;
TInt index1=0;
const TUint16* strs=abuf->Ptr();
TInt len=abuf->Length();
TInt subLen;
while(true)
{
wids=0;
wrap=EFalse;
for(index0=index1;index1<len;index1++)
{
if(strs[index1]=='/n')
{
wrap=ETrue;
index1++;
break;
}
wids+=aFt.CharWidthInPixels(strs[index1]);
if(wids>aMaxWid)
{
break;
}
}
if(wrap)
{
subLen=index1-index0-2;
TUint16* NLStr=(TUint16*)malloc(subLen*sizeof(TUint16)+1);
for(int i=0;i<subLen;i++)
NLStr[i]=strs[index0+i];
NLStr[subLen]=0;
TPtrC str(NLStr);
lineTxts->AppendL(str);
free(NLStr);
}
else
{
subLen=index1-index0;
TUint16* NLStr=(TUint16*)malloc(subLen*sizeof(TUint16)+1);
// memset(NLStr,'0',subLen*sizeof(TUint16)+1);
for(int i=0;i<subLen;i++)
NLStr[i]=strs[index0+i];
NLStr[subLen]=0;
TPtrC str(NLStr);
lineTxts->AppendL(str);
free(NLStr);
}
if(index1>=len)
break;
}
CleanupStack::Pop(lineTxts);
}
return lineTxts;
}
return NULL;
}