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;
}
但是却不行,我在该函数在设置断点来调试,发现根本不会进入该函数.
...全文
833 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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;
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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