www.pudn.com > GdiplusTest16.zip > GdiPlusInit.h


/************************************************************************** 
* 
* Copyright (c) 2000-2001 Microsoft Corporation 
* 
* Module Name: 
* 
*   Gdiplus initialization 
* 
* Abstract: 
* 
*   GDI+ Startup and Shutdown APIs 
* 
**************************************************************************/ 
 
#ifndef _GDIPLUSINIT_H 
#define _GDIPLUSINIT_H 
 
enum DebugEventLevel 
{ 
    DebugEventLevelFatal, 
    DebugEventLevelWarning 
}; 
 
// Callback function that GDI+ can call, on debug builds, for assertions 
// and warnings. 
 
typedef VOID (WINAPI *DebugEventProc)(DebugEventLevel level, CHAR *message); 
 
// Notification functions which the user must call appropriately if 
// "SuppressBackgroundThread" (below) is set. 
 
typedef Status (WINAPI *NotificationHookProc)(OUT ULONG_PTR *token); 
typedef VOID (WINAPI *NotificationUnhookProc)(ULONG_PTR token); 
 
// Input structure for GdiplusStartup() 
 
struct GdiplusStartupInput 
{ 
    UINT32 GdiplusVersion;             // Must be 1 
    DebugEventProc DebugEventCallback; // Ignored on free builds 
    BOOL SuppressBackgroundThread;     // FALSE unless you're prepared to call  
                                       // the hook/unhook functions properly 
    BOOL SuppressExternalCodecs;       // FALSE unless you want GDI+ only to use 
                                       // its internal image codecs. 
     
    GdiplusStartupInput( 
        DebugEventProc debugEventCallback = NULL, 
        BOOL suppressBackgroundThread = FALSE, 
        BOOL suppressExternalCodecs = FALSE) 
    { 
        GdiplusVersion = 1; 
        DebugEventCallback = debugEventCallback; 
        SuppressBackgroundThread = suppressBackgroundThread; 
        SuppressExternalCodecs = suppressExternalCodecs; 
    } 
}; 
 
// Output structure for GdiplusStartup() 
 
struct GdiplusStartupOutput 
{ 
    // The following 2 fields are NULL if SuppressBackgroundThread is FALSE. 
    // Otherwise, they are functions which must be called appropriately to 
    // replace the background thread. 
    // 
    // These should be called on the application's main message loop - i.e. 
    // a message loop which is active for the lifetime of GDI+. 
    // "NotificationHook" should be called before starting the loop, 
    // and "NotificationUnhook" should be called after the loop ends. 
     
    NotificationHookProc NotificationHook; 
    NotificationUnhookProc NotificationUnhook; 
}; 
 
// GDI+ initialization. Must not be called from DllMain - can cause deadlock. 
// 
// Must be called before GDI+ API's or constructors are used. 
// 
// token  - may not be NULL - accepts a token to be passed in the corresponding 
//          GdiplusShutdown call. 
// input  - may not be NULL 
// output - may be NULL only if input->SuppressBackgroundThread is FALSE. 
 
extern "C" Status WINAPI GdiplusStartup( 
    OUT ULONG_PTR *token, 
    const GdiplusStartupInput *input, 
    OUT GdiplusStartupOutput *output); 
 
// GDI+ termination. Must be called before GDI+ is unloaded.  
// Must not be called from DllMain - can cause deadlock. 
// 
// GDI+ API's may not be called after GdiplusShutdown. Pay careful attention 
// to GDI+ object destructors. 
 
extern "C" VOID WINAPI GdiplusShutdown(ULONG_PTR token); 
 
#endif