一、CListCtrl在MFC中共有四种view可供选择,每种view用不同的方式显示列表的内容。
· 图标视图(Icon view)
每一项以全尺寸图标(32×32像素)出现,下面有一个标签。用户可在列表视图窗口拖动项到任意位置。
· 小图标视图(Small icon view)
视图每一项以小图标(16×16像素)出现,右边有一个标签。用户可在列表视图窗口拖动项到任意位置。
· 列表视图(List view)
每一项以小图标出现,下面有一个标签。项按列排列,不能拖动到列表视图窗口的任何位置。
· 报表视图(Report view)
每一项在本行上出现,右边有排列成列的附加信息。最左边的列包含小图标和标签,下一列包含应用指定的子项。
二、使用List Control控件有两种方法。
1.在对话框体上添加,直接从工具箱里点List Control拖拉即可,在属性里view项设置视图类型。
CListCtrl *pMyList;
pMyList = (CListCtrl*)GetDlgItem(IDC_LIST);
2.无对话框体,直接显示在程序初始视图窗口里面。这时,如果基于CListView的类,声明变量,然后调用CListView类里的成员函数GetListCtrl()。
CListCtrl *pMyList;
pMyList = &GetListCtrl();
pMyList->ModifyStyle(0,LVS_ICON);//设置为视图类型
三、其它设置。如显示样式、位置、背景等。
设置显示样式:网格,选中时整行高亮
pMyList->SetExtendedStyle( LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );
如要固定每列不能用鼠标拖动,添加如下代码:
CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)pMyList->GetHeaderCtrl();
pHeaderCtrl->EnableWindow( FALSE ) ;
四、之后可以插入行、列。下例为Report view 类型的List,除第一行为标题,其余每行的第一列为item项,第二列为subitem。
pMyList->InsertColumn(0,_T("节次"),LVCFMT_CENTER,iColumnWidth);
pMyList->InsertColumn(1,_T("课程"),LVCFMT_CENTER ,iColumnWidth);
pMyList->InsertItem(0,_T("第一节"));
pMyList->SetItemText(0,1,_T("语文"));
pMyList->InsertItem(1,_T("第二节"));
pMyList->SetItemText(1,1,_T("数学"));
五、一般都要为List加图标的,可以加bitmap或者icon图标。
1.Bitmap图标。
CBitmap *pBitmap=new CBitmap;
CImageList *pImageList=new CImageList;
pBitmap->LoadBitmap(IDB_BITMAP1);
pImageList->Create (48,48,ILC_COLOR,7,2);
pImageList->Add(PBitmap,RGB(0,0,0));
pListView->SetImageList(pImageList,LVSIL_NORMAL);//ICON 视图加上这行
然后pMyList->InsertItem(0,_T("第一节")),改为pMyList->InsertItem(0,_T("第一节"),iImage),iImage为ImageList中的图片编号
2.当然也可添加ICON图标,如下。
//新建用来存放图标的列表
CImageList* imageList = new CImageList();
imageList->Create(32,32,ILC_COLORDDB|ILC_MASK,7,7);
//从资源加载图标
HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON));
imageList->Add(hIcon);
获取当前选中列表项编号:int i =pMyList->GetSelectionMark();