因为listctrl的每个item只支持显示260位字符,所以我重写了这个控件,在DrawItem事件里做了处理。
现在确实能显示260位以上的字符串了,双击某一列的表头的边缘,列的宽度只会缩放到260位字符,261位以后的字符显示不了。
我想问的是:怎么样双击列头的边缘,使列宽缩放以至于全部显示字符串的内容(260位以后)。不知道怎么描述,如果看不懂的话非常抱歉...
另外,双击列宽的边缘会触发OnHdnDividerdblclick(NMHDR *pNMHDR, LRESULT *pResult)事件.

解决方案 »

  1.   

    http://www.codeguru.com/forum/showthread.php?t=335385
      

  2.   

    用CDC::GetTextExtent逐一计算出每个Item对应子项的宽度,找出最大值,再用CListCtrl::SetColumnWidth设置列宽。
      

  3.   

    双击事件中GetTextExtentPoint32获取对应的item的字符宽度等,然后SetColumnWidth 来设置对应的宽度
      

  4.   


    GetTextExtent不是静态的函数不能直接用,怎么在OnHdnDividerdblclick(NMHDR *pNMHDR, LRESULT *pResult)事件中获得CDC啊?this->GetDC()是不对的
      

  5.   

    this->GetDC() 怎么不对?所得数据不正确?
      

  6.   

    CDC *pDC = this->GetDC();
    pDC->GetTextExtent(...);
    得到的宽度比我现有字体的宽度宽很多.比如我现在"ABCD"在界面上实际的宽度是20,但是pDC->GetTextExtent算出来却是40.
      

  7.   

    获取ListCtrl控件的DC,如果关联了控件变量,可以用CClientDC dc(&m_List),或者用GetDlgItem根据控件ID获取一个CWnd指针,再用该指针获取DC。
      

  8.   

    补充一下,要获取ListCtrl的字体,SelectObject选入DC,用完后再选出。