CListCtrl的基础使用 缩略图

 

CListCtrl使用详解


增加一个:SetItemState(-1,   0,   LVIS_SELECTECD);  //取消所有选中



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_Name,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);

之类的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值