www.pudn.com > StyleToolkit_demo_src.zip > GdiplusH.h
#ifndef _GDIPLUSH_H_INCLUDED_
#define _GDIPLUSH_H_INCLUDED_
//
// GDI+ helper file v1.0
//
// Written by Zoltan Csizmadia (zoltan_csizmadia@yahoo.com)
//
// GDIPLUS_NO_AUTO_INIT:
// GDI+ won't be initialized at program startup,
// you have to create GdiPlus::GdiPlusInitialize object to
// initialize GDI+ ( GDI+ will be uninitialized, when destructor
// is called.
//#define GDIPLUS_NO_AUTO_INIT
// GDIPLUS_USE_GDIPLUS_MEM:
// GdipAlloc and GdipFree is used for memory operations
// In this case _Crt functions cannot be used to detect
// memory leaks
//#define GDIPLUS_USE_GDIPLUS_MEM
// GDIPLUS_NO_AUTO_NAMESPACE:
// Gdiplus namespace wont' be defined as a used namespace
// In this case you have to use Gdiplus:: prefix
//#define GDIPLUS_NO_AUTO_NAMESPACE
#ifdef _GDIPLUS_H
#error Gdiplus.h is already included. You have to include this file instead.
#endif
// Fix for STL iterator problem
#define iterator _iterator
#define list _list
#define map _map
#define _GDIPLUSBASE_H
namespace Gdiplus
{
namespace DllExports
{
#include "GdiplusMem.h"
};
class GdiplusBase
{
public:
#ifdef _DEBUG
static void* __cdecl GdiplusAlloc( size_t nSize, LPCSTR szFileName, int nLine )
{
#ifdef GDIPLUS_USE_GDIPLUS_MEM
UNREFERENCED_PARAMETER(szFileName);
UNREFERENCED_PARAMETER(nLine);
return DllExports::GdipAlloc(nSize);
#else
return ::operator new( nSize, szFileName, nLine );
#endif
}
static void GdiplusFree( void* pVoid, LPCSTR szFileName, int nLine )
{
#ifdef GDIPLUS_USE_GDIPLUS_MEM
UNREFERENCED_PARAMETER(szFileName);
UNREFERENCED_PARAMETER(nLine);
DllExports::GdipFree(pVoid);
#else
::operator delete( pVoid, szFileName, nLine );
#endif
}
void* (operator new)(size_t nSize)
{
return GdiplusAlloc( nSize, __FILE__, __LINE__ );
}
void* (operator new[])(size_t nSize)
{
return GdiplusAlloc( nSize, __FILE__, __LINE__ );
}
void * (operator new)(size_t nSize, LPCSTR lpszFileName, int nLine)
{
return GdiplusAlloc( nSize, lpszFileName, nLine );
}
void (operator delete)(void* pVoid)
{
GdiplusFree( pVoid, __FILE__, __LINE__ );
}
void (operator delete[])(void* pVoid)
{
GdiplusFree( pVoid, __FILE__, __LINE__ );
}
void operator delete(void* pVoid, LPCSTR lpszFileName, int nLine)
{
GdiplusFree( pVoid, lpszFileName, nLine);
}
#else // _DEBUG
static void* __cdecl GdiplusAlloc( size_t nSize )
{
#ifdef GDIPLUS_USE_GDIPLUS_MEM
return DllExports::GdipAlloc(nSize);
#else
return ::operator new(nSize);
#endif
}
static void GdiplusFree( void* pVoid )
{
#ifdef GDIPLUS_USE_GDIPLUS_MEM
DllExports::GdipFree(pVoid);
#else
::operator delete( pVoid );
#endif
}
void* (operator new)(size_t nSize)
{
return GdiplusAlloc( nSize );
}
void* (operator new[])(size_t nSize)
{
return GdiplusAlloc( nSize );
}
void (operator delete)(void* pVoid)
{
GdiplusFree( pVoid );
}
void (operator delete[])(void* pVoid)
{
GdiplusFree( pVoid );
}
#endif
};
};
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include
#ifdef _DEBUG
#undef new
#endif
#pragma comment (lib, "Gdiplus.lib")
namespace Gdiplus
{
class GdiPlusInitialize
{
public:
GdiPlusInitialize()
{
GdiplusStartupInput Startup;
GdiplusStartup( &m_Token, &Startup, NULL );
}
~GdiPlusInitialize()
{
GdiplusShutdown( m_Token );
}
protected:
ULONG_PTR m_Token;
#ifndef GDIPLUS_NO_AUTO_INIT
static GdiPlusInitialize m_Initialize;
#endif
};
#ifndef GDIPLUS_NO_AUTO_INIT
GdiPlusInitialize GdiPlusInitialize::m_Initialize;
#endif
}
#ifndef GDIPLUS_NO_AUTO_NAMESPACE
using namespace Gdiplus;
#endif
// STL problem
#undef iterator
#undef list
#undef map
#endif