98 lines
3.1 KiB
C
98 lines
3.1 KiB
C
/**************************************************************************
|
|
*
|
|
* 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
|