在CListCtrl中,用大图标样式显示,但是想只显示图标,不显示文字。
已经采用的措施:
(1)在InsertItem的时候,将TEXT设置成""或者NULL
结果:确实看不见文字了,
但文字区域还在,明显空隙很大。
(2)用SetIconSpacing设置图标的排列间隔
结果:图标排列很整齐了,
但是文字区域还在,结果点第2行的图标会选中第一行的项.
(3)改用小图标等其他样式,文字区域仍然存在.问题:
谁有简单的办法能真正去掉文字区域啊.难道只有用自绘制?
如果用自己绘制,我希望项的区域大小正好等于我的图标大小,怎么控制项的大小?
已经采用的措施:
(1)在InsertItem的时候,将TEXT设置成""或者NULL
结果:确实看不见文字了,
但文字区域还在,明显空隙很大。
(2)用SetIconSpacing设置图标的排列间隔
结果:图标排列很整齐了,
但是文字区域还在,结果点第2行的图标会选中第一行的项.
(3)改用小图标等其他样式,文字区域仍然存在.问题:
谁有简单的办法能真正去掉文字区域啊.难道只有用自绘制?
如果用自己绘制,我希望项的区域大小正好等于我的图标大小,怎么控制项的大小?
具体的两个虚函数去msdn上面去查
在你的工程里定义一下(或者安装最新的vista SDK)
#define LVS_EX_HIDELABELS 0x00020000
然后:
DWORD dwExStyle = ListView_GetExtendedListViewStyle(hwndlist);
dwExStyle |= LVS_EX_HIDELABELS;
ListView_SetExtendedListViewStyle(hwndlist, dwExStyle);
就大功告成了!如果楼主想在所有系统里通用,那只有自绘了-_-
接分啦:)
但是怎么自己制定Item的大小呢?
http://www.vckbase.com/document/viewdoc/?id=836把 m_list.InsertItem(i,info.szDisplayName,i);改为
m_list.InsertItem(i,"",i);感觉没有痕迹
m_list.InsertItem(i,"",i);文字虽然没有,但文字区域还在啊.我想让项的RECT等于Icon的大小
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;
}利用自绘机制 这里自己画