89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
#ifndef _LOGO_H
|
|
#define _LOGO_H
|
|
|
|
typedef HRESULT (* LPUPDATEFN)( void *pData, DWORD dwItem, HBITMAP hImage, LPCWSTR pszCache, BOOL fCache );
|
|
|
|
#define LOGO_HEIGHT 32
|
|
#define LOGO_WIDE_WIDTH 194
|
|
#define LOGO_WIDTH 80
|
|
|
|
class CLogoBase
|
|
{
|
|
public:
|
|
CLogoBase( BOOL fWide = FALSE );
|
|
~CLogoBase();
|
|
|
|
virtual STDMETHODIMP_(ULONG) AddRef(void) PURE;
|
|
virtual STDMETHODIMP_(ULONG) Release(void) PURE;
|
|
|
|
static void _Initialize( void );
|
|
static void _Cleanup( void );
|
|
|
|
virtual IShellFolder * GetSF() PURE;
|
|
virtual HWND GetHWND() PURE;
|
|
|
|
inline HIMAGELIST GetLogoHIML( void );
|
|
|
|
// intialisation functions
|
|
HRESULT InitLogoView( void );
|
|
HRESULT ExitLogoView( void );
|
|
|
|
int GetLogoIndex( DWORD dwItem, LPCITEMIDLIST pidl, IRunnableTask **ppTask, DWORD * pdwPriority, DWORD * pdwFlags );
|
|
int GetDefaultLogo( LPCITEMIDLIST pidl, BOOL fQuick );
|
|
|
|
HRESULT AddTaskToQueue( IRunnableTask *pTask, DWORD dwPriority, DWORD lParam );
|
|
|
|
// create the default logo for an item....
|
|
HRESULT CreateDefaultLogo(int iIcon, int cxLogo, int cyLogo, LPCTSTR pszText, HBITMAP * phBmpLogo);
|
|
|
|
HRESULT FlushLogoCache( void );
|
|
|
|
HRESULT AddRefLogoCache( void );
|
|
HRESULT ReleaseLogoCache( void );
|
|
|
|
// get the task ID used with the task scheduler
|
|
virtual REFTASKOWNERID GetTOID( void ) PURE;
|
|
|
|
virtual HRESULT UpdateLogoCallback( DWORD dwItem, int iIcon, HBITMAP hImage, LPCWSTR pszCache, BOOL fCache ) PURE;
|
|
|
|
HRESULT DitherBitmap( HBITMAP hBmp, HBITMAP * phBmpNew );
|
|
|
|
int AddIndicesToLogoList( int iIcon, UINT uIndex );
|
|
|
|
int FindLogoFromIcon( int iIcon, int * piLastLogo );
|
|
|
|
protected:
|
|
|
|
int GetCachedLogoIndex(DWORD dwItem, LPCITEMIDLIST pidl, IRunnableTask **ppTask, DWORD * pdwPriority, DWORD * pdwFlags );
|
|
|
|
IImageCache * _pLogoCache; // My be NULL in low memory conditions.
|
|
IShellTaskScheduler * _pTaskScheduler;
|
|
HIMAGELIST _himlLogos;
|
|
SIZEL _rgLogoSize;
|
|
DWORD _dwClrDepth;
|
|
HDSA _hdsaLogoIndices;
|
|
|
|
static CRITICAL_SECTION s_csSharedLogos;
|
|
static long s_lSharedWideLogosRef;
|
|
static IImageCache * s_pSharedWideLogoCache;
|
|
static HDSA s_hdsaWideLogoIndices;
|
|
|
|
HPALETTE _hpalHalftone;
|
|
BOOL _fWide;
|
|
};
|
|
|
|
inline HIMAGELIST CLogoBase::GetLogoHIML( )
|
|
{
|
|
return _himlLogos;
|
|
}
|
|
|
|
struct LogoIndex
|
|
{
|
|
int iIcon;
|
|
int iLogo;
|
|
};
|
|
|
|
|
|
#endif
|
|
|