AVOID DOWN TO NEXT PAGE,HAVE TO UP

解决方案 »

  1.   

    你可以尝试以下的方法:(首先要选择List Box的样式为Horizontal Scroll和DISABLE NO SCROLL)
    CDC* pDC=m_List.GetDC();
    CString str;
    int cx=0,nCount,nChar;
    nCount=m_List.GetCount();
    TEXTMETRIC tm;
    pDC->GetTextMetrics(&tm);
    for (int i=0;i<nCount;i++)
    {
    m_List.GetText(i,str);
    nChar=str.GetLength();
    if (tm.tmAveCharWidth*nChar>cx)
    cx=tm.tmAveCharWidth*nChar;
    }
    m_List.SetHorizontalExtent(cx);
    因为此处的tm.tmAveCharWidth不是十分准确,在一些比较长的字符串时会出现较大误差。
      

  2.   

    谢谢cloudshadow1(云影)我也是这么做的,在文字比较长时,就是不准,那么怎么改进呢?
      

  3.   

    CDC* pDC = m_List.GetDC();
    CString str;
    int cx = 0, nWidth = 0;
    for (int i=m_List.GetCount()-1; i>=0; i--)
    {
       m_List.GetText(i, str);
       cx = (pDC->GetTextExtent(str)).cx;
       if(cx > nWidth)
          nWidth = cx;
    }
    //if(mList.GetHorizontalExtent() != nWidth)
    m_List.SetHorizontalExtent(nWidth);
    m_List.ReleaseDC(pDC);
      

  4.   

    忘记说一个事了,我对话框字体采用的是“宋体,9”,为的是在系统采用任何字体时,对话框客户区都保证原尺寸
    若采用System字体,azuo_lee()的代码工作的非常出色
    但现在应如何在采用我的字体的情况下仍可获得正常的滚动尺寸呢?
    我试过
    ::DrawTextEx( pDC->m_hDC,
    (char *)(LPCTSTR)str,
    -1,
    &rc,
    DT_CALCRECT | DT_SINGLELINE,
    NULL
    );
    与azuo_lee()的代码出现同样的问题
      

  5.   

    GetDC之后加上:
    CFont * pFont = m_List.GetFont();
    CFont * pOldFont = pDC->SelectObject(pFont);
    ReleaseDC之前加上:
    pDC->SelectObject(pOldFont);
      

  6.   

    用GetTextExtent才能得到准确的显示宽度,当然在此之前必须先选好字体,GetTextMetrics只能得到平均宽度。
      

  7.   


    问题解决谢谢大侠 azuo_lee() 的尽心解答
    谢谢 jiagh(无会) 的激励
    谢谢 Belle(江雪) 的可爱
    谢谢 cloudshadow1(云影) 的支持
    谢谢 prettywolf(多情自古空余,此恨绵绵无绝期) 的very simple
    谢谢 horsehorse(老马) 的解释
    谢谢 lpt(独云) 的肯定另外,特别感谢
    fz_zhou(vcfan)
    HowUCan(怎么办)
    minkerui(你好)
    的奋力一推这个贴子分开的太少了,为表感谢,我已另开贴子加分,其中绝无不义之财,请尽兴
    加分贴子http://www.csdn.net/expert/topic/235/235732.shtm