当前位置:  开发笔记 > 编程语言 > 正文

获取常见文件类型的图标

如何解决《获取常见文件类型的图标》经验,为你挑选了1个好方法。

我想在我的dll中获取常见文件类型的图标.我正在使用vc ++.我只有文件的文件扩展名和mime类型,我希望根据该类型获取文件的图标.

有人可以告诉我如何做到这一点?(vc ++中提供的方法需要用户提供需要图标的文件的路径.我无权访问任何此类文件)

谢谢.



1> newgre..:

Shell API

你可以通过调用从外壳让他们SHGetFileInfo()与一起SHGFI_USEFILEATTRIBUTES标志-此标志使得例程,而不需要在实际存在通过文件名的工作,所以如果你有一个文件扩展名只是做了一个文件名,追加扩展,并通它在.

通过组合其他标志,您将能够检索:

由系统配置确定的大图标或小图标:SHGFI_ICON|SHGFI_LARGEICONSHGFI_ICON|SHGFI_SMALLICON

由shell配置确定的大图标或小图标:SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SHELLICONSIZESHGFI_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, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON);

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

// Load a Shell Small icon image
SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), 
   SHGFI_USEFILEATTRIBUTES 
   | SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SMALLICON);

如果要绘制这样的图标,请使用以下内容:

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

// Draw it at the System Large size
DrawIconEx( hDC, nLeft, nTop, hIcon, 0, 0, 0, 
            NULL, DI_DEFAULTSIZE | DI_NORMAL );

// Draw it at some other size (40x40 in this example)
DrawIconEx( hDC, nLeft, nTop, hIcon, 40, 40, 0, NULL, 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;

请记住,你必须通过释放所获得的图标hIconDestroyIcon()你用它做了.


@jn:我喜欢你的例子,所以我把我们的答案结合起来并删除了我的.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有