CListCtrl使用详解
1。先来介绍REPORT类型的CListCtrl:
首先使用下面的语句设置CListCtrl的style:
DWORD SetExtendedStyle( DWORD dwNewStyle );
其中
LVS_EX_CHECKBOXES 表示添加CheckBox
LVS_EX_FULLROWSELECT 表示选择整行
LVS_EX_GRIDLINES 表示添加表格线
如果设置了LVS_EX_CHECKBOXES属性,则可以用
BOOL GetCheck( int nItem ) const;
来得到某一行是否Checked。
可以先用下面的语句来删除以前的东西:
for(int k=2;k>=0;k--) //注意要从后往前删,否则出错
m_ListCtrl.DeleteColumn(k);
m_ListCtrl.DeleteAllItems();
用下面的语句新建列:
m_ListCtrl.InsertColumn(0,_T("文件名"),LVCFMT_IMAGE|LVCFMT_LEFT);
m_ListCtrl.InsertColumn(1,_T("仪器类别"));
m_ListCtrl.InsertColumn(2,_T("项目类别"));
其中LVCFMT_IMAGE表示可以在第一列加入图标。如果不要图标可以删去。
然后设置列宽:
for(j&#61;0;j<3;j&#43;&#43;)
m_ListCtrl.SetColumnWidth(j ,100);
以下为列表加入图标&#xff0c;如果不需要图标&#xff0c;可以跳过这一步。注意只在第一次加入&#xff0c;如果多次加入会出错&#xff01;
先在头文件中加入声明&#xff1a;
CImageList m_ImageList;
这是必要的&#xff0c;如果在cpp的某个函数中加入由于生命期结束&#xff0c;CImageList自动释放&#xff0c;则效果是列表中看不到图标&#xff0c;只看到一个白方块。
下面生成CImageList&#xff0c;并将其绑定到CListCtrl中&#xff0c;这是CImageList中还没有图标&#xff0c;只是一个容器&#xff1a;
static int flag&#61;2;
if(flag&#61;&#61;2){//只调用一次SetImageList&#xff0c;否则出错
m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1);
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
}
flag&#61;(flag&#43;1)%2;
如果CListCtrl已经用过&#xff0c;曾经加过图标进去&#xff0c;这时就要删除上次放进m_ImageList中的Image
for(int kk&#61;0;kk m_ImageList.Remove(k); 下面介绍如何向CListCtrl里面加入行&#xff0c;并同时为每一行动态加入图标&#xff1a; 假设m_listRowCount为要加入的行数。 CBitmap* bitmap; bitmap&#61;new CBitmap[m_list1rowCount]; HBITMAP hbitmap; for(int i &#61; 0; i { //为每一行插入相应的缩略图 CFile f; CFileException e; if( !f.Open(m_FileName, CFile::modeRead, &e )){ //m_FileName为bmp文件名&#xff0c;由你来定 hbitmap &#61; (HBITMAP)LoadImage(NULL,path&#43;"blank.bmp",IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); }else{ f.Close(); hbitmap &#61; (HBITMAP)LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); } bitmap[i].Attach(hbitmap); m_ImageList.Add(&bitmap[i], #008080); //插入行 m_ListCtrl.InsertItem(i,m_FileName,i); m_ListCtrl.SetItemText(i,1,type); m_ListCtrl.SetItemText(i,2,m_Path); } //记得删除已经没用的临时文件 if(m_list1rowCount!&#61;0) delete[] bitmap; 2。如果是ICON类型的CListCtrl&#xff0c;则要做一点点改动&#xff1a; 把绑定图标集的代码由 SetImageList(&m_ImageList,LVSIL_SMALL); 改为 SetImageList(&m_ImageList,LVSIL_NORMAL); 插入行时只用 InsertItem(i,mainSet.m_FileName,i); 不用 SetItemText(i,1,type); 之类的代码。