Symbian 字符串自动换行

// ----------------------自动折行=========================//

加入头文件
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值