怎样在CListCtrl中只显示图标?

双杯献酒 2006-09-19 05:05:47
在CListCtrl中,用大图标样式显示,但是想只显示图标,不显示文字。
已经采用的措施:
(1)在InsertItem的时候,将TEXT设置成""或者NULL
结果:确实看不见文字了,
   但文字区域还在,明显空隙很大。
(2)用SetIconSpacing设置图标的排列间隔
结果:图标排列很整齐了,
   但是文字区域还在,结果点第2行的图标会选中第一行的项.
(3)改用小图标等其他样式,文字区域仍然存在.

问题:
谁有简单的办法能真正去掉文字区域啊.

难道只有用自绘制?
如果用自己绘制,我希望项的区域大小正好等于我的图标大小,怎么控制项的大小?
...全文
819 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
MLiang 2006-09-24
  • 打赏
  • 举报
回复

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;
}

利用自绘机制 这里自己画
三条猫 2006-09-20
  • 打赏
  • 举报
回复
还是自绘最能完成楼主的愿望,这种代码很多,在vc知识库上搜下就有了
littlepboy 2006-09-20
  • 打赏
  • 举报
回复
嗯,没找到更简单的方法。。。
yjgx007 2006-09-20
  • 打赏
  • 举报
回复
有这时间,自已写一个ListCtrl都写完了.
力为 2006-09-20
  • 打赏
  • 举报
回复
交换column就可以了
双杯献酒 2006-09-20
  • 打赏
  • 举报
回复
最后做出来就象游戏里的物品栏那种效果.
双杯献酒 2006-09-20
  • 打赏
  • 举报
回复
我的第一条措施就是
m_list.InsertItem(i,"",i);

文字虽然没有,但文字区域还在啊.

我想让项的RECT等于Icon的大小
zhucde 2006-09-20
  • 打赏
  • 举报
回复
看看VCKBASE中的这个例子
http://www.vckbase.com/document/viewdoc/?id=836

把 m_list.InsertItem(i,info.szDisplayName,i);改为
m_list.InsertItem(i,"",i);

感觉没有痕迹
0011411 2006-09-20
  • 打赏
  • 举报
回复
自绘吧
双杯献酒 2006-09-20
  • 打赏
  • 举报
回复
没办法了,只好自己OnPaint了,
但是怎么自己制定Item的大小呢?
sdzbbz 2006-09-19
  • 打赏
  • 举报
回复
路过,帮顶
palmax 2006-09-19
  • 打赏
  • 举报
回复
首先声明,我的这个方法仅适用于WinXP及以上系统
在你的工程里定义一下(或者安装最新的vista SDK)
#define LVS_EX_HIDELABELS 0x00020000
然后:
DWORD dwExStyle = ListView_GetExtendedListViewStyle(hwndlist);
dwExStyle |= LVS_EX_HIDELABELS;
ListView_SetExtendedListViewStyle(hwndlist, dwExStyle);
就大功告成了!

如果楼主想在所有系统里通用,那只有自绘了-_-
接分啦:)
DentistryDoctor 2006-09-19
  • 打赏
  • 举报
回复
1楼说的当然没问题,就是麻烦一些了。
yaotong 2006-09-19
  • 打赏
  • 举报
回复
jf
mynamelj 2006-09-19
  • 打赏
  • 举报
回复
把它的类型改为LVS_ICON or LVS_SMALLICON
jiajia4212 2006-09-19
  • 打赏
  • 举报
回复
重定义两个虚函数就行了,OnMeasureItem()和OnDrawItem()
具体的两个虚函数去msdn上面去查

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧