通过设置列的宽度为0, 可以隐藏列表框的某一列,但是用户通过拖动列表框的大小,隐藏的列,可能又被显示出来了。
我们可以自己写一个CListEx继承CListCtr,然后捕获拖动的消息,对该消息进行特殊处理。
BOOL CListEx::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; switch (((NMHDR*)lParam)->code) { case HDN_BEGINTRACKW://拖动 case HDN_BEGINTRACKA: // 设定为自己不想改变的列值 if (pHDN->iItem == m_icolLock) { *pResult = TRUE; return TRUE; } break; } return CListCtrl::OnNotify(wParam, lParam, pResult); }
// 设置要隐藏的列 void CListEx::LockColoum(int column) { m_icolLock = column; }
头文件添加:
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);