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