//******************************************************************************************* // // Filename : XIcon.h // // defines for CImageList and CXIcon // // Copyright (c) 1994 - 1996 Microsoft Corporation. All rights reserved // //******************************************************************************************* #ifndef _XICON_H_ #define _XICON_H_ class CImageList { public: CImageList() : m_himl(NULL) {} ~CImageList() {if (m_himl) ImageList_Destroy(m_himl);} operator HIMAGELIST() {return(m_himl);} BOOL Create(int cx, int cy, int cGrow) { m_himl = ImageList_Create(cx, cy, ILC_MASK, cGrow, cGrow); return(m_himl != NULL); } private: HIMAGELIST m_himl; } ; class CXIcon { public: CXIcon() {} ~CXIcon() {} BOOL Init(HWND hwndLB, UINT idiDef); CImageList& GetIML(BOOL bLarge) {return(bLarge ? m_cimlLg : m_cimlSm);} enum { AI_LARGE = 0x0001, AI_SMALL = 0x0002, } ; int AddIcon(HICON hIcon, UINT uFlags=AI_LARGE|AI_SMALL) { int i = -1; if (uFlags & AI_LARGE) { i = ImageList_AddIcon(m_cimlLg, hIcon); } if (uFlags & AI_SMALL) { i = ImageList_AddIcon(m_cimlSm, hIcon); } return(i); } int GetIcon(IShellFolder *psf, LPCITEMIDLIST pidl); private: int GetCachedIndex(LPCTSTR szIconFile, int iIndex, UINT wFlags); int CacheIcons(HICON hiconLarge, HICON hiconSmall, LPCTSTR szIconFile, int iIndex, UINT wFlags); static HRESULT ExtractIcon(LPCTSTR szIconFile, int iIndex, UINT wFlags, HICON *phiconLarge, HICON *phiconSmall, DWORD dwSizes); static UINT GetIDString(LPTSTR pszIDString, UINT uIDLen, LPCTSTR szIconFile, int iIndex, UINT wFlags); HWND m_hwndLB; CImageList m_cimlLg; CImageList m_cimlSm; } ; #endif // _XICON_H_