我想实现自动根据窗口长度对显示在窗口内的字符串进行换行的功能,类似记事本的自动换行功能.

解决方案 »

  1.   

    窗口客户区RECT你能得到
    TEXT长度你能得到
    TEXT高度你能得到
    剩下的就是计算你打算怎么换
      

  2.   

    如果是定长字体,很简单,根据字体宽度计算;如果是变长字体,用GetTextExtent计算字符串长度。
      

  3.   

    我的意思实现类似下面函数的功能:unsigned long GetStringCount(CDC * pDC,CSize szIn,CString strOut)
    {
    TEXTMETRIC  tm;
    unsigned long nTextCount=strOut.GetLength();
    unsigned long nCount=0;
    unsigned long nWidth=0;
    pDC->GetTextMetrics(&tm);
    nCount=szIn.cx/tm.tmAveCharWidth;
    nWidth=pDC->GetTextExtent(strOut.GetBuffer(),nCount>nTextCount?nTextCount:nCount).cx;
    if(nWidth>szIn.cx)
    {
    do{
    nWidth-=pDC->GetTextExtent(strOut.GetBuffer()+nCount-1,1).cx;
    nCount--;
    }while(nWidth>szIn.cx);
    }else if(nWidth<szIn.cx)
    {
    unsigned long nw=nWidth;
    unsigned long nc=nCount;
    while(true)
    {
    nc++;
    if(nc>nTextCount)
    break;
    nw+=pDC->GetTextExtent(strOut.GetBuffer()+nCount,1).cx;
    if(nw>szIn.cx)
    break;
    else
    {
    nWidth=nw;
    nCount=nc;
    }
    }
    }
    return nCount;    
    }匆匆忙忙编程的不知是否有错,我就是想要实现上面函数功能的最好方法.