列表控件中的一列如果插入的文本的宽度大于它的列宽,会显示"...",例如:插入文本“笔记本电脑”,会显示“笔记本...”,能不能显示不下的文本可以不显示,只显示“笔记本”,不要后面的“...”,该怎么解决啊?除了把每一列变宽外还有没有其他方法?

解决方案 »

  1.   

    自绘CListCtrl,重写 DrawItem,
    在 DrawText中,把DT_END_ELLIPSIS 的风格去掉,这个就是加省略号的。 pDC->DrawText(szText, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE|DT_END_ELLIPSIS);
      

  2.   

    重写的DrawItem是虚函数吗,用不用加 WM_DRAWITEM()消息?
      

  3.   

    DrawItem函数该如何写啊,我原来用的是虚拟列表,进行检索出来的数据,显示在虚拟列表上的。
      

  4.   

    我这个自绘的CListBox应该符合你的条件..
    http://download.csdn.net/download/allen_lanyuhai/3303164只要在DrawItem(..)这个函数里面把显示文字的语句pDC->DrawText(...)改成pDC->DrawText(szText, lstrlen(szText),&rcItem,DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE|DT_END_ELLIPSIS);
    就可以了...
      

  5.   

    我自绘重写 DrawItem了,不知道为什么,程序没有执行DrawItem呢,我的继承关系是这样的:
    Classs CColoredListCtrl::CListCtrl
    {
     ......
    }
    Class VirtualListCtrl::CColoredListCtrl
    {
    在这里面实现了虚拟列表,并检索数据显示
    在这里重写了DrawItem并在.cpp中实现该函数,但程序并没有执行DrawItem
    }
      

  6.   

    列表控件给加上owner draw style,并且该控件对应的变量定义为:VirtualListCtrl m_listPage;
      

  7.   

    哦,确实是没有设置Own Draw风格,呵呵