在CListCtrl中,用大图标样式显示,但是想只显示图标,不显示文字。
已经采用的措施:
(1)在InsertItem的时候,将TEXT设置成""或者NULL
结果:确实看不见文字了,
   但文字区域还在,明显空隙很大。
(2)用SetIconSpacing设置图标的排列间隔
结果:图标排列很整齐了,
   但是文字区域还在,结果点第2行的图标会选中第一行的项.
(3)改用小图标等其他样式,文字区域仍然存在.问题:
谁有简单的办法能真正去掉文字区域啊.难道只有用自绘制?
如果用自己绘制,我希望项的区域大小正好等于我的图标大小,怎么控制项的大小?

解决方案 »

  1.   

    重定义两个虚函数就行了,OnMeasureItem()和OnDrawItem()
    具体的两个虚函数去msdn上面去查
      

  2.   

    把它的类型改为LVS_ICON or LVS_SMALLICON
      

  3.   

    首先声明,我的这个方法仅适用于WinXP及以上系统
    在你的工程里定义一下(或者安装最新的vista SDK)
    #define LVS_EX_HIDELABELS 0x00020000
    然后:
    DWORD dwExStyle = ListView_GetExtendedListViewStyle(hwndlist);
    dwExStyle |= LVS_EX_HIDELABELS;
    ListView_SetExtendedListViewStyle(hwndlist, dwExStyle);
    就大功告成了!如果楼主想在所有系统里通用,那只有自绘了-_-
    接分啦:)
      

  4.   

    有这时间,自已写一个ListCtrl都写完了.
      

  5.   

    没办法了,只好自己OnPaint了,
    但是怎么自己制定Item的大小呢?
      

  6.   

    看看VCKBASE中的这个例子
    http://www.vckbase.com/document/viewdoc/?id=836把 m_list.InsertItem(i,info.szDisplayName,i);改为
     m_list.InsertItem(i,"",i);感觉没有痕迹
      

  7.   

    我的第一条措施就是
     m_list.InsertItem(i,"",i);文字虽然没有,但文字区域还在啊.我想让项的RECT等于Icon的大小
      

  8.   


    void CListCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
    {
    *pResult = CDRF_DODEFAULT;
    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
    CDC* pDC = CDC::FromHandle( pLVCD->nmcd.hdc );
    int nItem = 0;
    CString strKey = _T(""); if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
    {
    *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
    {
    if ( m_ItemMap.empty() )
    {
    return;
    } switch( GetViewType() )
    {
    case LVS_ICON:
    DrawIconStyle( pLVCD );
    *pResult = CDRF_DODEFAULT;
    break;
    case LVS_LIST:
    DrawListStyle( pLVCD );
    *pResult = CDRF_DODEFAULT;
    break;
    case LVS_REPORT:
    DrawReportStyle( pLVCD );
    *pResult = CDRF_SKIPDEFAULT;
    break;
    default:
    break;
    }
    } return;
    }利用自绘机制 这里自己画