今天写了一个支持汉字的字符串分行函数,主要功能就是可以将一个含有汉字和字符的串根据设定分行。代码如下:
/************************************************************************/
/* 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 ;
}
}
}
阅读(1817) | 评论(0) | 转发(0) |