能否做到?
11 个解决方案
#1
不能,但你可以通过SetItemData和GetItemData额外保存你必要的数据
#2
呵呵,我刚刚完成这样一个CListCtrl。
#3
可以做到,把该列的长度设置为 0 就可以。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。
#4
呵呵
#5
可以做到,把该列的长度设置为 0 就可以。
========================================
这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。
happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?)
---------------------------------------------------
你是怎么做到的?能否谈一下原理?
========================================
这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。
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);
}
二是要派生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
干吗不用SetItemData
#1
不能,但你可以通过SetItemData和GetItemData额外保存你必要的数据
#2
呵呵,我刚刚完成这样一个CListCtrl。
#3
可以做到,把该列的长度设置为 0 就可以。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。
但是用户可以通过 ‘拉’把该列显示出来,不过也可以限制不允许用户 ‘拉’。
#4
呵呵
#5
可以做到,把该列的长度设置为 0 就可以。
========================================
这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。
happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?)
---------------------------------------------------
你是怎么做到的?能否谈一下原理?
========================================
这个办法不错,不过要小心“非法”用户的拖拉操作哦,呵呵。
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);
}
二是要派生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
干吗不用SetItemData