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=0;j<3;j++)
  m_ListCtrl.SetColumnWidth(j ,100);
 
以下爲列表加入圖標,如果不需要圖標,可以跳過這一步。注意只在第一次加入,如果多次加入會出錯!
先在頭文件中加入聲明:
 CImageList m_ImageList;
這是必要的,如果在cpp的某個函數中加入由於生命期結束,CImageList自動釋放,則效果是列表中看不到圖標,只看到一個白方塊。
下面生成CImageList,並將其綁定到CListCtrl中,這是CImageList中還沒有圖標,只是一個容器:
 static int flag=2;
 if(flag==2){//只調用一次SetImageList,否則出錯
  m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1);
  m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
 }
 flag=(flag+1)%2;
如果CListCtrl已經用過,曾經加過圖標進去,這時就要刪除上次放進m_ImageList中的Image
 for(int kk=0;kk<m_ImageList.GetImageCount();kk++)
  m_ImageList.Remove(k);
 
下面介紹如何向CListCtrl裏面加入行,並同時爲每一行動態加入圖標:
假設m_listRowCount爲要加入的行數。
 CBitmap* bitmap;
 bitmap=new CBitmap[m_list1rowCount];
 HBITMAP hbitmap;
 
 for(int i = 0; i < m_listRowCount; i++)
 {
  //爲每一行插入相應的縮略圖
  CFile f;
  CFileException e; 
  if( !f.Open(m_FileName, CFile::modeRead, &e )){ //m_FileName爲bmp文件名,由你來定
   hbitmap = (HBITMAP)LoadImage(NULL,path+"blank.bmp",IMAGE_BITMAP,0,0,
    LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
  }else{
   f.Close();
   hbitmap = (HBITMAP)LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,
    LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
  }
  bitmap[i].Attach(hbitmap);
  m_ImageList.Add(&bitmap[i], RGB(0, 128, 128));
 
  //插入行
  m_ListCtrl.InsertItem(i,m_FileName,i);
  m_ListCtrl.SetItemText(i,1,type);
  m_ListCtrl.SetItemText(i,2,m_Path);
 }
 
 //記得刪除已經沒用的臨時文件
 if(m_list1rowCount!=0)
  delete[] bitmap;

2。如果是ICON類型的CListCtrl,則要做一點點改動:
把綁定圖標集的代碼由
 SetImageList(&m_ImageList,LVSIL_SMALL);
改爲
 SetImageList(&m_ImageList,LVSIL_NORMAL);

插入行時只用
 InsertItem(i,mainSet.m_FileName,i);
不用
 SetItemText(i,1,type);
之類的代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章