ListCtrl显示不同类型文件图标

    这几天特别的累,发现自己有那么多的东西都不会,很多的时候真的是想放弃,很多的时候也是被打击的快要失去了信心,不过还好,我没有,我还是每天都充满了希望,我相信每天都会有新的收获。
    不过说实话,我发现自己的学习能力真的很强,我对套接字其实根本没有研究,但是做这个项目,还是要用到套接字,本来这个工程的通信不是归我管,但是后来出现了问题,还是落到了我的头上。还好,一个晚上的时间,我就完成了任务。
    还是切入正题,工程有个功能是使用ListCtrl显示客户端的文件列表,这个很简单,但是如果要显示每种文件类型的图标,,那么就不好办了,本来想搜集各种文件类型的图标当作资源加入到工程里面,但是这样做的结果就是会累死人。所以另外想办法,然后找到了SHGetFileInfo这个函数。还是看一下代码吧
    这个模块实现了循环读取某一个目录下面的文件,并且得到他们的图标,添加到lisectrl的功能 
 CImageList *pBigImage,*pSmallImage;//这两个是为listctrl提供文件图标的ImangList
 int indeximage;
 int nCount=imagelistb.GetImageCount();
 int nCount2=imagelists.GetImageCount();
 for(int m=1;m<nCount;m++)  //没有删除index为0的图标,也就是第一个图标是文件夹的图标
 {
  imagelistb.Remove(m);
 }
 for(int mm=1;mm<nCount2;mm++)
 {
  imagelists.Remove(mm);
 }
 pBigImage=m_list1.GetImageList(LVSIL_SMALL);     //指向listctrl现在使用的ImageList
 pSmallImage=m_list1.GetImageList(LVSIL_NORMAL);  //指向listctrl现在使用的ImageList
 CFileFind   cFindFiles;
 char szFileName[256];
 char found[200];
 sprintf(szFileName,"%s//*.*",getpath);
 BOOL bFound=cFindFiles.FindFile(szFileName);
 while(bFound)//这个循环是枚举文件的
 {
  bFound=(BOOL)cFindFiles.FindNextFile();
  if(!cFindFiles.IsDirectory())
  {
   strcpy(found,cFindFiles.GetFilePath().GetBuffer(200));
   SHFILEINFO shfi;
   memset(&shfi,0,sizeof(shfi));
   SHGetFileInfo(found,
    FILE_ATTRIBUTE_NORMAL,
    &shfi, sizeof(shfi),
    SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );  
   indeximage=pSmallImage->Add(shfi.hIcon);//向ImageList里面添加图标
   pBigImage->Add(shfi.hIcon);
   int nCount=m_list1.GetItemCount();
   m_list1.InsertItem(nCount,found,indeximage);
   m_list1.SetItemText(nCount,1,"文件");
  }
 } 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值