文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SHGetFileInfo 显示文件类型图标

SHGetFileInfo 显示文件类型图标

时间:2011-05-12  来源:宇智波Q

需要显示远程目录下文件跟文件夹的图标,但是软件并不支持直接获取远程目录下的图标,这时候就需要读取本机对应的目录图标和对应类型文件图标。

初始化的时候。需要将Imagelist设置给ListCtrl控件。

   // 初始化图标列表
        SHFILEINFO    sfi;
        HIMAGELIST imagelist;
        imagelist=(HIMAGELIST)SHGetFileInfo(_T(""), 
                0,
                &sfi, 
                sizeof(SHFILEINFO), 
                SHGFI_SYSICONINDEX | SHGFI_SMALLICON ) ;
        this->m_ListCtrl1.InsertColumn(0, _T("文件名"), 0, 200);
        this->m_ListCtrl1.SetImageList(CImageList::FromHandle(imagelist),LVSIL_SMALL)

在设置Item信息的时候读取icon 的索引值

   SHFILEINFO sInfo;
        // 在xp下读取目录图标,strFile可以为空,但是读出来的图标可能是不是我们想要的,可以读目录"c:\\windows"的图标来显示普通文件夹,这个文件夹xp、win7
都有。  
CString strFile = _T("folder"); SHGetFileInfo(strFile, FILE_ATTRIBUTE_DIRECTORY, &sInfo, sizeof(sInfo), SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX); this->m_ListCtrl1.InsertItem(0, strFile, sInfo.iIcon); if (sInfo.hIcon) DestroyIcon(sInfo.hIcon); strFile = _T("c:\\windows"); SHGetFileInfo(strFile, FILE_ATTRIBUTE_DIRECTORY, &sInfo, sizeof(sInfo), SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX); this->m_ListCtrl1.InsertItem(1, strFile, sInfo.iIcon); if (sInfo.hIcon) DestroyIcon(sInfo.hIcon);
       // 获取本机cpp文件图标的用法,其他文件突变类似,就是读取 .+后缀名 的图标
        strFile = _T(".cpp");
        SHGetFileInfo(strFile, FILE_ATTRIBUTE_NORMAL, &sInfo, sizeof(sInfo),
                SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX);
        this->m_ListCtrl1.InsertItem(2, strFile, sInfo.iIcon);
        if (sInfo.hIcon)
                DestroyIcon(sInfo.hIcon);

        strFile = _T(".h");
        SHGetFileInfo(strFile, FILE_ATTRIBUTE_NORMAL, &sInfo, sizeof(sInfo),
                SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX);
        this->m_ListCtrl1.InsertItem(3, strFile, sInfo.iIcon);
        if (sInfo.hIcon)
                DestroyIcon(sInfo.hIcon);

        // 硬盘盘符的图标跟目录的图标又不一样,这时候直接获取本机c盘的盘符
        strFile = _T("c:\\");
        SHGetFileInfo(strFile, FILE_ATTRIBUTE_DIRECTORY, &sInfo, sizeof(sInfo),
                SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX);
        this->m_ListCtrl1.InsertItem(4, strFile, sInfo.iIcon);
        if (sInfo.hIcon)
                DestroyIcon(sInfo.hIcon);

       // 对于没有后缀名的文件类型,只有这么取
        strFile = _T("file");
        SHGetFileInfo(strFile, FILE_ATTRIBUTE_NORMAL, &sInfo, sizeof(sInfo),
                SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX);
        this->m_ListCtrl1.InsertItem(5, strFile, sInfo.iIcon);
        if (sInfo.hIcon)
                DestroyIcon(sInfo.hIcon);
工程文件 http://files.cnblogs.com/jianu/SHGetFileInfo.zip
相关阅读 更多 +
排行榜 更多 +
Fate Grand Order Quest

Fate Grand Order Quest

冒险解谜 下载
童话之谜木偶传说

童话之谜木偶传说

冒险解谜 下载
逃离回忆中的母校

逃离回忆中的母校

冒险解谜 下载