X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/223d09f6b523aac674ef9b72a883dfa8d37c5d4e..49e399d8c0f2683a885bfec77e43cfde3b2249f4:/src/msw/dcclient.cpp diff --git a/src/msw/dcclient.cpp b/src/msw/dcclient.cpp index ec20193357..46642e078f 100644 --- a/src/msw/dcclient.cpp +++ b/src/msw/dcclient.cpp @@ -62,11 +62,9 @@ WX_DEFINE_OBJARRAY(wxArrayDCInfo); // macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC) IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC) IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC) -#endif // ---------------------------------------------------------------------------- // global variables @@ -112,7 +110,7 @@ wxWindowDC::~wxWindowDC() if ( !::ReleaseDC(GetWinHwnd(m_canvas), GetHdc()) ) { - wxLogLastError("ReleaseDC"); + wxLogLastError(wxT("ReleaseDC")); } m_hDC = 0; @@ -234,6 +232,11 @@ wxPaintDC::~wxPaintDC() ::EndPaint(GetWinHwnd(m_canvas), &g_paintStruct); ms_cache.Remove(index); + + // Reduce the number of bogus reports of non-freed memory + // at app exit + if (ms_cache.IsEmpty()) + ms_cache.Clear(); } //else: cached DC entry is still in use @@ -259,3 +262,20 @@ wxPaintDCInfo *wxPaintDC::FindInCache(size_t *index) const return info; } + +// find the entry for this DC in the cache (keyed by the window) +WXHDC wxPaintDC::FindDCInCache(wxWindow* win) +{ + wxPaintDCInfo *info = NULL; + size_t nCache = ms_cache.GetCount(); + for ( size_t n = 0; n < nCache; n++ ) + { + info = &ms_cache[n]; + if ( info->hwnd == win->GetHWND() ) + { + return info->hdc; + } + } + return 0; +} +