问个有点难度的问题,ListCtrl能否添加一个列,该列实际存在,但是不可见?

时间:2022-08-24 16:46:43
我想在ListCtrl里面添加一列,这样的一列实际是存在的,但是用户实际是看不到的,
能否做到?

11 个解决方案

#1


不能,但你可以通过SetItemData和GetItemData额外保存你必要的数据

#2


呵呵,我刚刚完成这样一个CListCtrl。

#3


可以做到,把该列的长度设置为 0 就可以。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。

#4


呵呵

#5


可以做到,把该列的长度设置为 0 就可以。
========================================

这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。

happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?) 
---------------------------------------------------
你是怎么做到的?能否谈一下原理?

#6


原理比较简单阿。一是要将长度设置为0
二是要派生CHeaderCtrl子类,在子类中响应OnChildNotify消息,截获鼠标拖拉修改宽度的事件,将这些事件屏蔽就OK了。样例代码:

//锁定第一列
BOOL CSortHeaderCtrl::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
{
NMHDR& nmh = *(NMHDR*)lp;
if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW
||nmh.code == HDN_DIVIDERDBLCLICKA ||nmh.code == HDN_DIVIDERDBLCLICKW) 
{
CRect rc;
GetItemRect(0,rc);
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
if(pt.x < rc.Width() + 5)
return *pRes=TRUE; // eat message to disallow sizing
}
// otherwise, pass to header control for default processing
return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
}

#7


指定宽度为零,并且不允许用户拖动此列!

#8


mark

#9


OnChildNotify 是什么消息事件?

#10


参考:http://www.vckbase.com/document/viewdoc/?id=675

#11


是不是要放一些数据,比如ID之类的
干吗不用SetItemData

#1


不能,但你可以通过SetItemData和GetItemData额外保存你必要的数据

#2


呵呵,我刚刚完成这样一个CListCtrl。

#3


可以做到,把该列的长度设置为 0 就可以。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。

#4


呵呵

#5


可以做到,把该列的长度设置为 0 就可以。
========================================

这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。

happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?) 
---------------------------------------------------
你是怎么做到的?能否谈一下原理?

#6


原理比较简单阿。一是要将长度设置为0
二是要派生CHeaderCtrl子类,在子类中响应OnChildNotify消息,截获鼠标拖拉修改宽度的事件,将这些事件屏蔽就OK了。样例代码:

//锁定第一列
BOOL CSortHeaderCtrl::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
{
NMHDR& nmh = *(NMHDR*)lp;
if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW
||nmh.code == HDN_DIVIDERDBLCLICKA ||nmh.code == HDN_DIVIDERDBLCLICKW) 
{
CRect rc;
GetItemRect(0,rc);
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
if(pt.x < rc.Width() + 5)
return *pRes=TRUE; // eat message to disallow sizing
}
// otherwise, pass to header control for default processing
return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
}

#7


指定宽度为零,并且不允许用户拖动此列!

#8


mark

#9


OnChildNotify 是什么消息事件?

#10


参考:http://www.vckbase.com/document/viewdoc/?id=675

#11


是不是要放一些数据,比如ID之类的
干吗不用SetItemData