// Helper to create a IExtractIcon handler. // // Usage: // (1) Derive from CExtractIconBase to implement your business logic by // overloading CExtractIconBase two virtual member fcts // ex: class CEIBMyDerivedClass : public CExtractIconBase // // (2) Add a few Initalization member fcts // ex: HRESULT CEIBMyDerivedClass::MyInit(MyData1* p1, MyData2* p2); // // (3) Create your derived object using the new operator, // ex: CEIBMyDerivedClass* peibmdc = new ... // // (4) Initialize it (using (2)), // ex: hr = peibmdc->MyInit(p1, p2); // class CExtractIconBase : public IExtractIconA, public IExtractIconW { public: // IExtractIconA STDMETHODIMP GetIconLocation(UINT uFlags, LPSTR pszIconFile, UINT cchMax, int* piIndex, UINT* pwFlags); STDMETHODIMP Extract(LPCSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize); // IExtractIconW STDMETHODIMP GetIconLocation(UINT uFlags, LPWSTR pszIconFile, UINT cchMax, int* piIndex, UINT* pwFlags); STDMETHODIMP Extract(LPCWSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize); // IUnknown helpers STDMETHODIMP QueryInterface(REFIID riid, void** ppv); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // derived class implements these virtual HRESULT _GetIconLocationW(UINT uFlags, LPWSTR pszIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) PURE; virtual HRESULT _ExtractW(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) PURE; CExtractIconBase(); protected: virtual ~CExtractIconBase(); private: LONG _cRef; };