Chinaunix首页 | 论坛 | 博客
  • 博客访问: 756094
  • 博文数量: 128
  • 博客积分: 7079
  • 博客等级: 少将
  • 技术积分: 1326
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-16 08:53
文章分类

全部博文(128)

文章存档

2011年(3)

2010年(12)

2009年(9)

2008年(23)

2007年(61)

2006年(20)

我的朋友

分类: C/C++

2006-12-27 17:04:00

  今天写了一个支持汉字的字符串分行函数,主要功能就是可以将一个含有汉字和字符的串根据设定分行。代码如下:

/************************************************************************/
/* iLineLength ;        每行最大长度                                    */
/* str ;                要分行的字符串                                  */
/* lines              存放每一行字符串的数组                          */
/************************************************************************/
void CTestChtolineDlg::GetLines( CStringArray &lines,CString str ,  int iLineLength )
{
 int iLength ; //字符串总长度
 BOOL isFirstDBCS ; //是否是汉字的第一个字节
 int iLineStart ;//每行字符串在str中的开始位子
 int iLineEnd ;//每行字符串在str中的结束位子
 CString sTemp ;
 int iLineIndex ;
 isFirstDBCS = FALSE ;//初始化为不是,这样遇到第一个汉字时就可以把第一个字节设置成TRUE第二个设置成FALSE
 iLength = 0 ;
 iLineEnd = 0 ;
 iLineStart = 0 ;
 iLineIndex = 0 ;
 iLength = str.GetLength() ;
 if ( iLength <= iLineLength )
 {
  lines.Add( str ) ;
  return ;
 }
 for( int i=0; i< iLength; i++ )
 {
  iLineIndex ++ ;
  if( IsDBCSLeadByte( str[i] ) )
  {
   if ( isFirstDBCS )
    isFirstDBCS = FALSE ;
   else
    isFirstDBCS = TRUE ;
  }
  if ( iLineIndex >= iLineLength )
  {//该换行了
   if ( isFirstDBCS )
   {//此位置是一个汉字的第一个字节
    iLineEnd = i - 1 ;//此行显示到前一个字节,这个汉字在下一行显示
   }
   else
    iLineEnd = i ;
   sTemp.Empty() ;
   sTemp = str.Mid( iLineStart, ( iLineEnd-iLineStart + 1) ) ;
   lines.Add( sTemp ) ;
   sTemp = str.Mid( (iLineEnd + 1) );
   GetLines( lines,sTemp, iLineLength ) ;
   break ;
  }
 }
}
阅读(1819) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~