//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // // iconhand.h // // The class definition for the cdf icon handler. // // History: // // 4/23/97 edwardp Created. // //////////////////////////////////////////////////////////////////////////////// // // Check for previous includes of this file. // #ifndef _ICONHAND_H_ #define _ICONHAND_H_ // // Defines // #define WSTR_DEFAULT L"DefaultLogo" #define LOGO_WIDTH 80 #define LOGO_WIDTH_WIDE 194 #define GLEAM_OFFSET 53 // // The class definition for the icon handler. // class CIconHandler : public IExtractIcon, #ifdef UNICODE public IExtractIconA, #endif public IExtractImage, public IRunnableTask, public CPersist { // // Methods. // public: // Constructor CIconHandler(void); // IUnknown STDMETHODIMP QueryInterface(REFIID, void **); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IExtractIcon methods. STDMETHODIMP GetIconLocation(UINT uFlags, LPTSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); STDMETHODIMP Extract(LPCTSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); #ifdef UNICODE // IExtractIconA methods. STDMETHODIMP GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags); STDMETHODIMP Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); #endif // IExtractImage STDMETHODIMP GetLocation(LPWSTR pszPathBuffer, DWORD cch, DWORD *pdwPriority, const SIZE* pSize, DWORD dwRecClrDepth, DWORD *pdwFlags); STDMETHODIMP Extract(HBITMAP* phBmp); // IRunnable task STDMETHODIMP Run(void); STDMETHODIMP Kill(BOOL fWait); STDMETHODIMP Suspend(void); STDMETHODIMP Resume(void); STDMETHODIMP_(ULONG) IsRunning(void); private: //Destructor ~CIconHandler(void); // check for default installed channel BOOL IsDefaultChannel(void); //Helper functions HRESULT ParseCdfIcon(void); HRESULT ParseCdfImage(BSTR* pbstrURL, BSTR* pbstrWURL); HRESULT ParseCdfShellLink(); HRESULT ParseCdfInfoTip(void** ppv); HRESULT ExtractCustomImage(const SIZE* pSize,HBITMAP* phBmp); HRESULT ExtractDefaultImage(const SIZE* pSize,HBITMAP* phBmp); HRESULT GetBitmap(IImgCtx* pIImgCtx, const SIZE* pSize, HBITMAP* phBmp); HRESULT StretchBltCustomImage(IImgCtx* pIImgCtx, const SIZE* pSize, HDC hdcDst); HRESULT StretchBltDefaultImage(const SIZE* pSize, HDC hdcDest); HRESULT DrawGleam(HDC hdcDst); HRESULT SynchronousDownload(IImgCtx* pIImgCtx, LPCWSTR pwszURL); inline BOOL UseWideLogo(int cx) {return cx > ((LOGO_WIDTH + LOGO_WIDTH_WIDE) >> 1);} //HRESULT QueryInternetShortcut(PCDFITEMIDLIST pcdfidl, // REFIID riid, // void** ppvOut); // // Member variables. // private: ULONG m_cRef; IExtractIcon* m_pIExtractIcon; BSTR m_bstrImageURL; BSTR m_bstrImageWideURL; PCDFITEMIDLIST m_pcdfidl; BOOL m_fDone; BOOL m_fDrawGleam; DWORD m_dwClrDepth; SIZE m_rgSize; LPTSTR m_pszErrURL; // this is the res: URL that shows errors messages }; #endif // _ICONHAND_H_