windows-nt/Source/XPSP1/NT/shell/shell32/menuband/logo.h
2020-09-26 16:20:57 +08:00

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