zoukankan      html  css  js  c++  java
  • 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);
    之类的代码

  • 相关阅读:
    Record of coding:Codeforces 1093E
    【刷题记录】网络流24题等
    【模板归纳】网络流及费用流
    【刷题记录】BZOJ2154 crash的数字表格 莫比乌斯反演
    【刷题记录】SDOI2017数字表格
    算法总结 给定范围内最大公约数为某一定值的数对个数的算法
    刷题记录【BZOJ2440 完全平方数】数论、组合数学、莫比乌斯函数
    刷题记录 【HAOI2007】理想的正方形 二维st表
    刷题记录【ZJOJ2005午餐】,贪心+DP或者
    刷题记录【ZJOI2007棋盘制作】二维DP,悬线法。。。
  • 原文地址:https://www.cnblogs.com/zhangyin/p/622160.html
Copyright © 2011-2022 走看看