/************************************************************************** * * 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