牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

一个Windows API的SHGetFileInfo()方法的Wrapper

头文件
/// @class CSHGetFileInfo
/// SHGetFileInfo的包裹类

class CSHGetFileInfo
{

public:
    CSHGetFileInfo();

    
virtual ~CSHGetFileInfo();

    
/// 获取系统图像列表
    
/// @param[in] bSmallIcon ture则为小图标,false则为大图标

    HIMAGELIST  GetSystemImageListHandle( BOOL bSmallIcon );

    
/// 获取系统图片列表的文件图片索引
    
/// @param[in] strFileName 文件名
    
/// @param[in] bSmallIcon ture则为小图标,false则为大图标

    int GetFileIconIndex( CString strFileName, BOOL bSmallIcon);

    
/// 获取系统图片列表的文件夹图片索引
    
/// @param[in] bSmallIcon

    int GetDirIconIndex(BOOL bSmallIcon);

    
/// 获取文件的icon的句柄
    
/// @param[in] strFileName 文件名
    
/// @param[in] bSmallIcon ture则为小图标,false则为大图标

    HICON GetFileIconHandle(CString strFileName, BOOL bSmallIcon);

    
/// 获取文件夹的icon的句柄
    
/// @param[in] bSmallIcon ture则为小图标,false则为大图标

    HICON GetFolderIconHandle(BOOL bSmallIcon );

    
/// 获取文件类型
    
/// @param[in] strFileName 文件名

    CString GetFileType(CString strFileName);

}
;


cpp文件
CSHGetFileInfo::CSHGetFileInfo()
{

}


CSHGetFileInfo::
~CSHGetFileInfo()
{

}



HIMAGELIST  CSHGetFileInfo::GetSystemImageListHandle( BOOL bSmallIcon )
{
    HIMAGELIST  hSystemImageList; 
    SHFILEINFO    ssfi; 

    
if (bSmallIcon)
    
{
        hSystemImageList 
= 
            (HIMAGELIST)SHGetFileInfo( 
            (LPCTSTR)_T(
"c:\\"), 
            
0
            
&ssfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_SMALLICON); 
    }

    
else
    
{
        hSystemImageList 
= 
            (HIMAGELIST)SHGetFileInfo( 
            (LPCTSTR)_T(
"c:\\"), 
            
0
            
&ssfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_LARGEICON); 
    }

    
return hSystemImageList;
}



int CSHGetFileInfo::GetFileIconIndex( CString strFileName, BOOL bSmallIcon )
{
    SHFILEINFO    sfi;

    
if (bSmallIcon)
    
{
        SHGetFileInfo(
            (LPCTSTR)strFileName, 
            FILE_ATTRIBUTE_NORMAL,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }

    
else
    
{
        SHGetFileInfo(
            (LPCTSTR)strFileName, 
            FILE_ATTRIBUTE_NORMAL,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }


    
return sfi.iIcon;

}


int CSHGetFileInfo::GetDirIconIndex(BOOL bSmallIcon )
{
    SHFILEINFO    sfi;
    
if (bSmallIcon)
    
{
        SHGetFileInfo(
            (LPCTSTR)
"Doesn't matter"
            FILE_ATTRIBUTE_DIRECTORY,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }

    
else
    
{
        SHGetFileInfo(
            (LPCTSTR)
"Doesn't matter"
            FILE_ATTRIBUTE_DIRECTORY,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_SYSICONINDEX 
| SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);

    }

    
return sfi.iIcon;

}

HICON CSHGetFileInfo::GetFileIconHandle(CString strFileName, BOOL bSmallIcon)
{

    SHFILEINFO    sfi;
    
if (bSmallIcon)
    
{
        SHGetFileInfo(
            (LPCTSTR)strFileName, 
            FILE_ATTRIBUTE_NORMAL,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_ICON 
| SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }

    
else
    
{
        SHGetFileInfo(
            (LPCTSTR)strFileName, 
            FILE_ATTRIBUTE_NORMAL,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_ICON 
| SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }

    
return sfi.hIcon;


}

HICON CSHGetFileInfo::GetFolderIconHandle(BOOL bSmallIcon )
{
    SHFILEINFO    sfi;
    
if (bSmallIcon)
    
{
        SHGetFileInfo(
            (LPCTSTR)
"Doesn't matter"
            FILE_ATTRIBUTE_DIRECTORY,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_ICON 
| SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    }

    
else
    
{
        SHGetFileInfo(
            (LPCTSTR)
"Does not matter"
            FILE_ATTRIBUTE_DIRECTORY,
            
&sfi, 
            
sizeof(SHFILEINFO), 
            SHGFI_ICON 
| SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
    }

    
return sfi.hIcon;
}


CString CSHGetFileInfo::GetFileType(CString strFileName)
{
    SHFILEINFO    sfi;

    SHGetFileInfo(
        (LPCTSTR)strFileName, 
        FILE_ATTRIBUTE_NORMAL,
        
&sfi, 
        
sizeof(SHFILEINFO), 
        SHGFI_TYPENAME 
| SHGFI_USEFILEATTRIBUTES);

    
return sfi.szTypeName;
}


posted on 2008-05-05 13:50 杨粼波 阅读(1601) 评论(1)  编辑 收藏 引用

评论

# re: 一个Windows API的SHGetFileInfo()方法的Wrapper 2012-01-31 15:13 飞飞龙

学习了  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理