博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
资源管理器的学习笔记一
阅读量:6978 次
发布时间:2019-06-27

本文共 1923 字,大约阅读时间需要 6 分钟。

实现系统图标列表类CSystemImageList。
   class CSystemImageList:public CObject
   {
       private:
             static CImageList* m_gpLargeImageList;   //大图标链表
             static CImageList* m_gpSmallImageList;   //小图标链表
             static int m_gRefCount;     //计数器
       private:
             //初始化静态列表
             BOOL InitGlobalList(CImageList* &rpImageList,BOOL bSmall=TRUE);
             //关闭静态链表
             void DestroyGlobalList(CImageList* & rpImageList);
       public:
             //得到图标链表
             CImageList* GetImageList(BOOL bSmall=TRUE) const;
             //得到指定文件的图标
             HICON GetIcon(const CString& sName,BOOL bOpen=FALSE,BOOL bSmall=TRUE); 
   } 
   
  
 //初始化链表
   BOOL CSystemImageList::InitGlobalList(CImageList* &rpImageList,BOOL bSmall)
   {
       BOOL bRet=FALSE;
       if(!rpImageList)    //如果链表为空
       {
           rpImageList=new CImageList;     //分配内存
           if(rpImageList)         //如果分配内存成功
           {
                SHFILEINFO sfi;
                DWORD dwFlags=SHGFI_USERFILEATTRIBUTES|SHGFI_SYSICONINDEX;
                if(bSmall)    //指定图标大小
                     dwFlags|=SHGFI_SMALLICON;
                size_t size=sizeof(SHFILEINOF);
                //获取操作系统图标链表
                DWORD dw=SHGetFileInfo(NULL,FILE_ATTRIBUTE_NORMAL,&sfi,size,dwFlags);
                rpImageList->Attach((HIMAGELIST)dw);    //保存链表
                rpImageList->SetBkColor(CLR_NONE);      //设置背景模式
                
                bRet=TRUE;
           }
       }
   }
   
   
//关闭图标链表
   void CSystemImageList::DestroyGlobalList(CImageList* &rpImageList) 
   {
       if(rpImageList)    //判断图像链表指针是否为空
       { 
            rpImageList->Detach();     //将图标链表对象与图表链表对象的句柄分离
            delete rpImageList;        //关闭图表链表
            rpImageList=NULL;
       }
   }
    
   
//返回链表指针
   CImageList* CSystemImageList::GetImageList(BOOL bSmall) const
   {
       CImageList* pList=NULL;
       if(bSmall)
           pList=m_gpSmallImageList;
       else
           pList=m_gpLargeImageList;
       return(pList);
   }
 
   
//返回指定文件的图标句柄
   HICON CSystemImageList::GetIcon(const CString& sName,BOOL bOpen,BOOL bSmall)
   {
       SHFILEINOF sfi;
       //指定属性
       DWORD dwFlags=SHGFI_DISPLAYNAME|SHGFI_ICON|SHGFI_LARGEICON;
       size_t size=sizeof(SHFILEINFO);    //得到缓冲区大小
       if(bSmall)
          dwFlags|=SHGFI_SMALLICON;    //指定小图标属性
       if(bOpen)
          dwFlages|=SHGFI_OPENICON;    //指定打开图标属性
       //获取文件属性
       SHGetFileInfo(sName,NULL,&sfi,size,SHGFI_DISPLAYNAME|SHGFI_ICON|SHGFI_LARGEICON);
       return(sfi.hIcon);     //返回图标句柄
   }
 
本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/164014,如需转载请自行联系原作者
你可能感兴趣的文章
关于手机已处理里重复单据的处理办法
查看>>
IIS 7.5 + FastCGI + PHP + Drupal 7 + Oracle
查看>>
我的友情链接
查看>>
英文版PDF不能显示中文PDF文件的解决方法
查看>>
linux 内核 出错-HP 方案
查看>>
Linux
查看>>
HashSet的使用
查看>>
WSFC 仲裁模型选择
查看>>
nginx安装 问题 1
查看>>
MST配置详解
查看>>
linux下用phpize给PHP动态添加扩展
查看>>
任意排列、组合终极Shell脚本
查看>>
★核心关注点_《信息系统项目管理师考试考点分析与真题详解》
查看>>
Go处理百万每分钟的请求
查看>>
你以为自己在填验证码,其实你是在给Google义务劳动
查看>>
linux实战考试题:批量创建用户和密码(不能使用循环)
查看>>
一个基于J2EE的web应用程序运行起来需要什么?
查看>>
Docker配置指南系列(二):指令集(二)
查看>>
nginx 开发一个简单的 HTTP 模块
查看>>
linux运维如何月薪过万?(收藏自用)
查看>>