From 385addaf21974aa63ad9eef47171244ab8b65ea9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 19 Sep 2007 01:02:16 +0000 Subject: [PATCH] shut down GDI+ from a module instead of doing it during static object destruction time when it may be too late (patch 1792915) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48778 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/graphics.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/msw/graphics.cpp b/src/msw/graphics.cpp index bda43979a7..f6eb219ca7 100644 --- a/src/msw/graphics.cpp +++ b/src/msw/graphics.cpp @@ -1286,6 +1286,7 @@ protected : void EnsureIsLoaded(); void Load(); void Unload(); + friend class wxGDIPlusRendererModule; private : bool m_loaded; @@ -1326,7 +1327,11 @@ void wxGDIPlusRenderer::Load() void wxGDIPlusRenderer::Unload() { if ( m_gditoken ) + { GdiplusShutdown(m_gditoken); + m_gditoken = NULL; + } + m_loaded = false; } wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxWindowDC& dc) @@ -1458,4 +1463,17 @@ wxGraphicsFont wxGDIPlusRenderer::CreateFont( const wxFont &font , const wxColou return wxNullGraphicsFont; } +// Shutdown GDI+ at app exit, before possible dll unload +class wxGDIPlusRendererModule : public wxModule +{ +public: + virtual bool OnInit() { return true; } + virtual void OnExit() { gs_GDIPlusRenderer.Unload(); } + +private: + DECLARE_DYNAMIC_CLASS(wxGDIPlusRendererModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxGDIPlusRendererModule, wxModule) + #endif // wxUSE_GRAPHICS_CONTEXT