m_listCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|m_listCtrl.GetExtendedStyle())
c. 如果要设置某行缺省checkbox勾选的话,代码中需要设置
m_listCtrl.SetItemState(iItem,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);
或
m_listCtrl.SetCheck(iItem); //设置checkbox为选中状态
(注意:SetItemState不触发Itemchanged,SetCheck触发Itemchanged)
2. 列排序
a.支持排序,需要insertitem时指定lparam,也即itemdata,因为CompareFunc时,两个相比较item的lparam是传入参数。
b.调用侧一般会采用,点击一次正排序,再点击一次逆排序,这就需要记录之前排序字段,以及排序顺序是正序还是逆序。
此时,可以添加变量m_preCol/m_preOrder记录,也或使用窗口属性SetProp/GetProp
c. 排序函数
排序函数在执行SortItems时被调用
m_listCtrl.SortItems(CompareFunc, (LPARAM)&ParamSort);
函数格式形如
int CALLBACKCompareFunc(LPARAMlParam1,LPARAMlParam2,LPARAMlParamSort) { 此时,可以基于lParam1找出比较item1,根据lparam2找出item2 然后由lParamSort找出排序列,以及正序还是逆序 // lParamSort格式可以用形始下面的格式 { bool bOrder; int orderColumn; CListCtrl* pList; }; } |
3. 某列绘制成图片
a. 重写CListCtrl,并绑定绘制子项处理
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw)
b. 在调用它的Dialog中绑定事件NM_CUSTOMDRAW,并显示调用重写ListCtrl的OnCustomdraw
ON_NOTIFY ( NM_CUSTOMDRAW, IDC_MY_LIST, OnCustomdrawNewList)
在OnCustomdrawNewList调用CCtrlList的重写类的OnCustomdraw
c. 然后就在重写ListCtrl的OnCustomdraw中实现要单独绘制的内容了
形如
void CNewListCtrl::OnNMCustomdrawSubItem(NMHDR *pNMHDR,LRESULT *pResult) {
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); *pResult = 0; NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR ); LPNMLVCUSTOMDRAW lpnmcd = (LPNMLVCUSTOMDRAW) pNMHDR; switch(lpnmcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: // 首个消息:通知listctrl重绘,返回逐个item绘制 { *pResult = CDRF_NOTIFYITEMDRAW; break; } case CDDS_ITEMPREPAINT: // 第二个消息:通知绘制item,返回绘制sub item { *pResult = CDRF_NOTIFYSUBITEMDRAW; break; } case CDDS_ITEMPREPAINT|CDDS_SUBITEM: // 第三个消息:绘制subitem { if (pLVCD->iSubItem ==m_nColumn) // 要绘制图片的列 { // 把某图片绘制到设备上 CDC dc; dc.Attach(lpnmcd->nmcd.hdc); // 把某图片绘制到设备上—绘制处理… *pResult = CDRF_SKIPDEFAULT; // 需要制定绘制时跳过该项 break; } // Tell Windows to paint the control itself. *pResult = CDRF_DODEFAULT; break; } default: ; } } |
|
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)