CListCtrl使用详解

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 fairness 的 blog

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);
之类的代码。

本文关键:CListCtrl使用详解
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top