60 lines
2.2 KiB
C++
60 lines
2.2 KiB
C++
//---------------------------------------------------------------------------
|
|
// RenderList.h - manages list of CRemderObj objects
|
|
//---------------------------------------------------------------------------
|
|
#pragma once
|
|
//---------------------------------------------------------------------------
|
|
#include "Render.h"
|
|
//---------------------------------------------------------------------------
|
|
class CUxThemeFile; // forward
|
|
//---------------------------------------------------------------------------
|
|
#define MAX_RETADDRS 10
|
|
//---------------------------------------------------------------------------
|
|
struct RENDER_OBJ_ENTRY
|
|
{
|
|
CRenderObj *pRenderObj;
|
|
DWORD dwRecycleNum; // sequential number to validate handle against current obj
|
|
|
|
//---- these control use/freeing of object ----
|
|
int iRefCount; // number of HTHEME handles returned for this obj
|
|
int iInUseCount; // number of active wrapper API calls for this obj
|
|
int iLoadId; // load ID of associated theme file
|
|
BOOL fClosing; // TRUE when we are forcing this object closed
|
|
|
|
//---- for tracking foreign windows & debugging leaks ----
|
|
HWND hwnd;
|
|
};
|
|
//---------------------------------------------------------------------------
|
|
class CRenderList
|
|
{
|
|
//---- methods ----
|
|
public:
|
|
CRenderList();
|
|
~CRenderList();
|
|
|
|
HRESULT OpenRenderObject(CUxThemeFile *pThemeFile, int iThemeOffset,
|
|
int iClassNameOffset, CDrawBase *pDrawBase, CTextDraw *pTextObj, HWND hwnd,
|
|
DWORD dwOtdFlags, HTHEME *phTheme);
|
|
HRESULT CloseRenderObject(HTHEME hTheme);
|
|
|
|
HRESULT OpenThemeHandle(HTHEME hTheme, CRenderObj **ppRenderObj, int *piSlotNum);
|
|
void CloseThemeHandle(int iSlotNum);
|
|
void FreeRenderObjects(int iThemeFileLoadId);
|
|
|
|
#ifdef DEBUG
|
|
void DumpFileHolders();
|
|
#endif
|
|
|
|
protected:
|
|
//---- helper methods ----
|
|
BOOL DeleteCheck(RENDER_OBJ_ENTRY *pEntry);
|
|
|
|
//---- data ----
|
|
protected:
|
|
__int64 _iNextUniqueId;
|
|
CSimpleArray<RENDER_OBJ_ENTRY> _RenderEntries;
|
|
|
|
//---- lock for all methods of this object ----
|
|
CRITICAL_SECTION _csListLock;
|
|
};
|
|
//---------------------------------------------------------------------------
|