加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 获取常见文件类型的图标

发布时间:2020-12-16 05:31:08 所属栏目:百科 来源:网络整理
导读:我想在我的dll中获得常见文件类型的图标.我正在使用vc.我只有文件的文件扩展名和mime类型,我想要获取该文件的图标. 有人可以告诉我我该怎么办? (vc中可用的方法需要用户给出需要图标的文件的路径,我无法访问任何此类文件) 谢谢. 解决方法 Shell API 您可以
我想在我的dll中获得常见文件类型的图标.我正在使用vc.我只有文件的文件扩展名和mime类型,我想要获取该文件的图标.

有人可以告诉我我该怎么办? (vc中可用的方法需要用户给出需要图标的文件的路径,我无法访问任何此类文件)

谢谢.

解决方法

Shell API

您可以通过与SHGFI_USEFILEATTRIBUTES标志一起调用SHGetFileInfo()从shell获取它们 – 此标志允许例程在不要求传入的文件名实际存在的情况下工作,因此如果您的文件扩展名只是构成文件名,请附加扩展名,并传入.

通过组合其他标志,您将可以检索:

>系统配置确定的大小图标:SHGFI_ICON | SHGFI_LARGEICON或SHGFI_ICON | SHGFI_SMALLICON
>由shell配置确定的一个大或小的图标:SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SHELLICONSIZE或SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SHELLICONSIZE
> shell图像列表中图标的索引以及相应的图像列表:SHGFI_SYSICONINDEX
>存储图标的实际模块的路径和文件名(以及该模块中的图标索引):SHGFI_ICONLOCATION

例子

// Load a System Large icon image
SHGetFileInfo( szFileName,FILE_ATTRIBUTE_NORMAL,&shfi,sizeof(SHFILEINFO),SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_LARGEICON);

// Load a System Small icon image
SHGetFileInfo( szFileName,SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON);

// Load a Shell Large icon image
SHGetFileInfo( szFileName,SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SHELLICONSIZE);

// Load a Shell Small icon image
SHGetFileInfo( szFileName,SHGFI_USEFILEATTRIBUTES 
   | SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SMALLICON);

如果你想画一个这样的图标,可以使用这样的东西:

// Draw it at its native size
DrawIconEx( hDC,nLeft,nTop,hIcon,NULL,DI_NORMAL );

// Draw it at the System Large size
DrawIconEx( hDC,DI_DEFAULTSIZE | DI_NORMAL );

// Draw it at some other size (40x40 in this example)
DrawIconEx( hDC,40,DI_NORMAL );

图标句柄以及文件系统路径可以从SHFILEINFO结构获得:

typedef struct _SHFILEINFOA
{
        HICON       hIcon;                      // out: icon
        int         iIcon;                      // out: icon index
        DWORD       dwAttributes;               // out: SFGAO_ flags
        CHAR        szDisplayName[MAX_PATH];    // out: display name (or path)
        CHAR        szTypeName[80];             // out: type name
} SHFILEINFOA;

请记住,完成后,您必须将hIcon传递到DestroyIcon(),才能释放获得的图标.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读