2009-10-21 20:30 ListCtrl 在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。 先注明一下,这里,我们用m_listctrl 来表示一个CListCtrl 的类对象,然后这里我们的ListCtrl 都是 report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟 report 是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这个是参照《Effective C++》的叫法,俺觉得这么叫比较COOL :) 条款一:设置 ListCtrl 的风格 在CSDN 上常常看到有人问怎么设置风格的,他们ListCtrl 的样子是一个列表,有横条和竖条分界线,然后选中一行,要整一行都选中,而不是只有某一列被选中,等等,这里给一个比较全面的设置方法。 //获得原有风格 DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); dwStyle &= ~ (LVS_TYPEMASK); dwStyle &= ~ (LVS_EDITLABELS); //设置新风格 SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle, |LVS_REPORT | LVS_NOLABELWRAP | LVS_SHOWSELALWAYS); //设置扩展风格 DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles, styles ); 其中LVS_EX_FULLROWSELECT 就是前面说得整行选中 LVS_EX_GRIDLINES 网格线(只适用与 report 风格的listctrl) LVS_EX_CHECKBOXES 前面加个checkbox pListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES); 这也是一个很重要的属性,这样的话,可以在列表中加ICON,记得 windows 的任务管理器吗,你想做得那样,这个属性也要加哦,这个我以后会讲的~ 条款二:加入列头 这是一个比较实质的东西,给列表框分列,然后加上列头,代码说话,来了 TCHAR rgtsz[2][10] = {_T("列头 1"), _T("列头 2")}; LV_COLUMN lvcolumn; CRect rect; m_listctrl.GetWindowRect(&rect); for(int i=0;i<2;i++) { lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.pszText = rgtsz[i]; lvcolumn.iSubItem = i; lvcolumn.iOrder = i; if(i==0) { lvcolumn.cx = rect.Width()*3/5 ; } else lvcolumn.cx = rect.Width()*2/5; m_...