如何隐藏掉list control中的某一行
rt 问题点数:20、回复次数:17Top
1 楼laiyiling(陌生人[MVP])回复于 2005-06-20 17:22:28 得分 0
SetColumn把宽度设置为0Top
2 楼laiyiling(陌生人[MVP])回复于 2005-06-20 17:28:08 得分 5
用把列宽设置为0的方法,有个问题就是在界面上用鼠标拖动表头改变列的宽度时,这个列又显示出来了,要做到完全的隐藏就做一个CHeaderCtrl的派生类,设定隐藏列变量,处理HDN_BEGINTRACK和HDN_ITEMCHANGING通知,发现当前列为隐藏列则不进行默认处理。
或者直接用两个CListctrl控件,一个多1列,一个少1列,分别隐藏显示他们。这样最简单,效果也不错的。呵呵!
Top
3 楼helloqiqi()回复于 2005-06-20 17:38:59 得分 0
先谢谢了,但是我要隐藏一行,不是一列Top
4 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-06-20 18:11:47 得分 0
删丫的,自己备份一下啊Top
5 楼helloqiqi()回复于 2005-06-21 11:00:14 得分 0
不能删掉,我要的效果是这样的
id age
001 20
002 25
004 21
006 24
007 54
像这样,中间空掉一行,其实是隐藏掉,怎么实现?求救啊
Top
6 楼hxue1981(雨山)回复于 2005-06-21 11:03:10 得分 3
呵呵!这样实际容易呀,这一行什么都不往里写不就行了吗?Top
7 楼helloqiqi()回复于 2005-06-21 11:06:56 得分 0
写要写的,但要隐藏掉,因为前面有checkbox,如果不写,checkbox也会出来的。Top
8 楼idAnts(此广告位招租)回复于 2005-06-21 11:11:11 得分 3
写空格Top
9 楼wuchi(风云)回复于 2005-06-21 11:20:55 得分 3
可以考虑在dc上刷白色Top
10 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-06-21 11:25:57 得分 3
看看能不能得到checkbox的ID, 把它隐藏掉Top
11 楼hxue1981(雨山)回复于 2005-06-21 11:28:38 得分 3
想把那个checkbox隐藏掉有困难!
用这种格式设置的checkbox
ListView_SetExtendedListViewStyle(m_ListCtrl, LVS_EX_CHECKBOXES);
不易改动Top
12 楼helloqiqi()回复于 2005-06-21 12:58:04 得分 0
我就是这样写的
ListView_SetExtendedListViewStyle(m_ListCtrl, LVS_EX_CHECKBOXES);
隐藏麻烦了Top
13 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-06-21 13:03:00 得分 0
设置三态,第三个为空白,将State的高位置为2(要重载)
SetImageList( CImageList* pImageList, int nImageList );
LVSIL_STATE Image list with state imagesTop
14 楼Phourm()回复于 2005-06-21 13:58:45 得分 0
替换成空行不就行了! 要SHOW再换回来
InsertItem(nItem, "");
or
SetItemText(nItem, nSubItem, "");Top
15 楼helloqiqi()回复于 2005-06-22 14:00:04 得分 0
Phourm() 的方法我试了,可还是不能隐藏掉checkboxTop
16 楼helloqiqi()回复于 2005-06-22 14:24:33 得分 0
vcmute(横秋),能给我详细的代码吗?CImageList* pImageList是什么?Top
17 楼laiyiling(陌生人[MVP])回复于 2005-08-03 13:35:50 得分 0
http://www.zahui.com/html/1/3774.htm
ListCtrl中HeaderCtrl的失效问题
曾经做过让某列HeaderCtrl失效的功能,主要是想保持HeaderCtrl宽度不变,方法是重载ListCtrl的虚函数OnNotify,在这个函数中判断某个列的索引iSubItem,如果是要失效的HeaderCtrl则设置*iResult = TRUE表示消息不再往下处理,同时return,代码如下:
BOOL CStyleList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
NMHEADER* pNMHeader = (NMHEADER*)lParam;
if (pNMHeader->iItem == 0)
{
*pResult = TRUE;
return TRUE;
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}
其结果是,被失效的HeaderCtrl向ListCtrl发送的所有通知消息都不被处理,导致对HeaderCtrl的拉动、拖拽等功能将全部失效。
现在,我要做一个很简单的功能:在这个失效HeaderCtrl上设置一个位图图标,由于这个HeaderCtrl的通知消息全部都不被ListCtrl处理,设置位图的操作因此也失效了,是需要改进代码的时候了:
BOOL StyleList::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
NMHEADER* pNMHeader = (NMHEADER*)lParam;
if (pNMHeader->iItem == 0 && ((pNMHeader->hdr.code == HDN_BEGINTRACKW) | (pNMHeader->hdr.code == HDN_DIVIDERDBLCLICKW)))
{
*pResult = TRUE;
return TRUE;
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}
保持HeaderCtrl宽度不变,当然是不能随意左右拉动HeaderCtrl。除此之外,我注意到当在两个HeaderCtrl之间双击也会造成HeaderCtrl的宽度变化,因此,需要屏蔽这两个通知消息码:
HDN_BEGINTRACKW : 当开始调整HeaderCtrl宽度时
HDN_DIVIDERDBLCLICKW:当在两个HeaderCtrl之间双击改变HeaderCtrl宽度时Top




