CListCtrl使得某列不能拖动(不能改变第三列宽度)

coldplay968 2006-10-09 10:06:36
我派生出来的CMyListCtrl,获取HDN_ITEMCHANGING消息,想设置第三列不能拖动,就是说不能改变宽度.
void CMyListCtrl::OnItemchanging(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
if((phdn->hdr.code == HDN_BEGINTRACKW || phdn->hdr.code == HDN_BEGINTRACKA)
&& phdn->iItem == 2)
{
*pResult = TRUE;
return ;
}
*pResult = 0;
}
但是却不行,我在该函数在设置断点来调试,发现根本不会进入该函数.
...全文
409 点赞 收藏 5
写回复
5 条回复
coldplay968 2006年10月09日
已经解决谢谢
回复 点赞
coldplay968 2006年10月09日
以下代码确实能禁止拖动第三列和第四列,但是只要一想拖动第三或者第四列,其它列就马上也不能拖动了,就是说其它列也不能改变列宽了.
可我不想这样,该如何改?
BOOL CSortHeaderCtrl::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
{
NMHDR& nmh = *(NMHDR*)lp;
HD_NOTIFY *phdn = (HD_NOTIFY *) lp;
if((phdn->hdr.code==HDN_BEGINTRACKA || phdn->hdr.code==HDN_BEGINTRACKW )
&& (phdn->iItem==2 ||phdn->iItem==3))
{
return *pRes=TRUE;
}
return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
}
回复 点赞
Seu_why 2006年10月09日
If you want to prevent resizing of only one column, you should check for the value in iItem field of the HD_NOTIFY structure. The code below stops only the first column from being resized.

BOOL CMyListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam;

if((pHDN->hdr.code == HDN_BEGINTRACKW || pHDN->hdr.code == HDN_BEGINTRACKA)
&& pHDN->iItem == 0) // Prevent only first (col# 0) from resizing
{
*pResult = TRUE; // disable tracking
return TRUE; // Processed message
}

return CListCtrl::OnNotify(wParam, lParam, pResult);
}
回复 点赞
Seu_why 2006年10月09日
http://www.codeguru.com/Cpp/controls/listview/columns/article.php/c1065/

http://www.vckbase.com/document/viewdoc/?id=675
回复 点赞
Seu_why 2006年10月09日
参考一下:


CPList是一个从clistctrl继承过来的.
void CPList::OnHdnItemchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
// TODO: Add your control notification handler code here
NMHEADER *pHdr = (NMHEADER*)pNMHDR;
CHeaderCtrl *pHead = GetHeaderCtrl();
pHdr->pitem->mask |= HDI_WIDTH;
switch(pHdr->iItem)
{
case 0://第一列
pHdr->pitem->cxy = 33;
break;
case 1://第二列
pHdr->pitem->cxy = 250;
break;
case 2://第三列
pHdr->pitem->cxy = 145;
break;
}
*pResult = 0;
}
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7893

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告