ファイルのアイコンの取得

(2003.09.18)
    // shell32.dll version 5.0 or later
    static BOOL Emulate_Shell_GetImageLists(HIMAGELIST* phiml, HIMAGELIST* phimlSmall)
    {
        if (phiml != NULL)
        {
            CSHFileInfo info;
            UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LARGEICON;
            *phiml = (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
        }
 
        if (phimlSmall != NULL)
        {
            CSHFileInfo info;
            UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_SMALLICON;
            *phimlSmall = (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
        }
 
        return TRUE;
    }
    static HIMAGELIST GetSysIconImageList(BOOL bLargeIcons = FALSE)
    {
        DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
 
        CSHFileInfo info;
        UINT uFlags = SHGFI_SYSICONINDEX | dwIconSize;
        return (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
    }
    static int GetSysIconIndex(LPCTSTR szFileName, BOOL bLargeIcons = FALSE)
    {
        DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
 
        CSHFileInfo info;
        UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LINKOVERLAY | dwIconSize;
        DWORD_PTR dwResult = ::SHGetFileInfo(szFileName, 0, &info, sizeof(info), uFlags);
        if (dwResult == 0)
        {
            return -1;
        }
 
        return info.iIcon;
    }
    static int GetSysIconIndex(LPCITEMIDLIST pidl, BOOL bLargeIcons = FALSE)
    {
        DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
 
        CSHFileInfo info;
        UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LINKOVERLAY | SHGFI_PIDL | dwIconSize;
        DWORD_PTR dwResult = ::SHGetFileInfo((LPCTSTR)pidl, 0, &info, sizeof(info), uFlags);
        if (dwResult == 0)
        {
            return -1;
        }
 
        return info.iIcon;
    }
    static int GetSysOpenIconIndex(LPCTSTR szFileName, BOOL bLargeIcons = FALSE, BOOL bPIDL = FALSE)
    {
        DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
        DWORD dwPIDL = bPIDL ? SHGFI_PIDL : 0;
 
        CSHFileInfo info;
        UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_OPENICON | dwIconSize | dwPIDL;
        DWORD_PTR dwResult = ::SHGetFileInfo(szFileName, 0, &info, sizeof(info), uFlags);
        if (dwResult == 0)
        {
            return -1;
        }
 
        return info.iIcon;
    }
    static int GetSysOpenIconIndex(LPCITEMIDLIST pidl, BOOL bLargeIcons = FALSE)
    {
        DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
 
        CSHFileInfo info;
        UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_OPENICON | SHGFI_PIDL | dwIconSize;
        DWORD_PTR dwResult = ::SHGetFileInfo((LPCTSTR)pidl, 0, &info, sizeof(info), uFlags);
        if (dwResult == 0)
        {
            return -1;
        }
 
        return info.iIcon;
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.