1、如果创建工程时没有使用文档视图结构,那么需要将CChildView m_wndView;改为CChildView *m_wndView。
2、不能使用ON_WM_PAINT这一消息映射,否则插入进去的Item会不显示,因为系统会调用onPaint函数绘制图形结构。
3、设置报表格式按如下方式
CListCtrl &listCtrl = GetListCtrl();// ModifyStyle(0,LVS_REPORT);
listCtrl.ModifyStyle(0,LVS_REPORT);
listCtrl.SetExtendedStyle(LVS_REPORT | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); //设置扩展风格
4、插入数据时
listCtrl.InsertColumn(0,_T("Name"),LVCFMT_LEFT,200);
listCtrl.InsertColumn(1,_T("Palce"),LVCFMT_LEFT,200);
LVITEM lvItem;
int nItem;
lvItem.mask=LVIF_TEXT;
lvItem.iItem=0;
lvItem.iSubItem=0;
lvItem.pszText= _T(" ");
nItem=listCtrl.InsertItem(&lvItem);
listCtrl.SetItemText(nItem,0,_T("xxx"));
listCtrl.SetItemText(nItem,1, _T("test1 "));
5、消息映射
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemchanged)
ON_NOTIFY_REFLECT(NM_CLICK, onItemClicked)
6、设置图标为首列,代替checkbox
//关联图标列表
CBitmap bm;
m_imagelist.Create(16,16,ILC_COLOR8,0,4);
//加载状态为0的图标,表示没有选中
CString strBitmapFile = g_strCurrentDir + _T("CheckBoxIcon/");
strBitmapFile += _T("bitmap0.bmp");
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,strBitmapFile,
IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
bm.Attach(hBitmap);
m_imagelist.Add(&bm,RGB(255,0,0));
GetListCtrl().SetImageList(&m_imagelist, LVSIL_SMALL);
//设置Item的图标
CListCtrl &listCtrl = GetListCtrl();
//设置图标
LV_ITEM item;
item.mask=LVIF_IMAGE;
item.iItem = iItem;
item.iSubItem = 0;
listCtrl.GetItem(&item);
//checkType为0-4之间的数值,为上面关联的图标列表的序号
item.iImage = checkType;
listCtrl.SetItem(&item);
//设置附加数据,后面通过获取数值来得到当前的状态
listCtrl.SetItemData(iItem, checkType);
7、优秀开源
http://www.codeproject.com/KB/list/ReportControl.aspx
http://www.codeproject.com/search.aspx?q=CListView&doctypeid=1&pgnum=2
http://www.codeproject.com/KB/list/listcheckbox.aspx
http://www.codeproject.com/KB/miscctrl/checkersctrl.aspx
功能超级强大的XCListCtrl