From: Vadim Zeitlin Date: Fri, 7 Aug 1998 22:22:30 +0000 (+0000) Subject: code using ms_PaintDC changed a little (a couple of asserts added, the behaviour X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/83626bfa72bd7f0147392818846242a846d12063?ds=sidebyside code using ms_PaintDC changed a little (a couple of asserts added, the behaviour did not change) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@463 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/dcclient.h b/include/wx/msw/dcclient.h index 05743e7ec3..9851d78d77 100644 --- a/include/wx/msw/dcclient.h +++ b/include/wx/msw/dcclient.h @@ -57,8 +57,8 @@ class WXDLLEXPORT wxPaintDC: public wxDC ~wxPaintDC(void); protected: - static WXHDC m_staticPaintHDC ; - static int m_staticPaintCount ; + static WXHDC ms_PaintHDC; + static uint ms_PaintCount; }; #endif diff --git a/src/msw/dcclient.cpp b/src/msw/dcclient.cpp index 9132057314..4c6b19b03b 100644 --- a/src/msw/dcclient.cpp +++ b/src/msw/dcclient.cpp @@ -29,6 +29,7 @@ #endif #include "wx/dcclient.h" +#include "wx/log.h" #include @@ -98,47 +99,40 @@ static PAINTSTRUCT g_paintStruct; // Don't call Begin/EndPaint if it's already been called: // for example, if calling a base class OnPaint. -WXHDC wxPaintDC::m_staticPaintHDC = 0; -int wxPaintDC::m_staticPaintCount = 0; +WXHDC wxPaintDC::ms_PaintHDC = 0; +uint wxPaintDC::ms_PaintCount = 0; // count of ms_PaintHDC usage -wxPaintDC::wxPaintDC(wxWindow *the_canvas) +wxPaintDC::wxPaintDC(wxWindow *canvas) { - if ( the_canvas && (m_staticPaintCount == 0)) - { - m_hDC = (WXHDC) ::BeginPaint((HWND) the_canvas->GetHWND(), &g_paintStruct); - m_hDCCount ++; - m_staticPaintCount ++ ; - m_staticPaintHDC = m_hDC ; - } - else - { - wxDebugMsg("wxPaintDC: Using existing HDC\n"); - m_hDC = m_staticPaintHDC ; - } + wxCHECK_RET( canvas, "NULL canvas in wxPaintDC ctor" ); - m_canvas = the_canvas; + m_canvas = canvas; + if ( ms_PaintCount > 0 ) { + // it means that we've already called BeginPaint and so we must just + // reuse the same HDC (BeginPaint shouldn't be called more than once) + wxASSERT( ms_PaintHDC ); + + m_hDC = ms_PaintHDC; + ms_PaintCount++; + } + else { + ms_PaintHDC = + m_hDC = (WXHDC)::BeginPaint((HWND)m_canvas->GetHWND(), &g_paintStruct); + ms_PaintCount = 1; + m_hDCCount++; + } } -wxPaintDC::~wxPaintDC(void) +wxPaintDC::~wxPaintDC() { - m_staticPaintCount -- ; - - if (m_staticPaintCount == 0) - { - if ( m_hDC && m_canvas) - { - ::EndPaint((HWND) m_canvas->GetHWND(), &g_paintStruct); - m_hDCCount --; - m_hDC = 0; - } - else - wxDebugMsg("~wxPaintDC: Did not release HDC\n"); - - m_staticPaintHDC = 0 ; - } - else - { - wxDebugMsg("~wxPaintDC: Did not release HDC\n"); + if ( m_hDC ) { + if ( !--ms_PaintCount ) { + ::EndPaint((HWND)m_canvas->GetHWND(), &g_paintStruct); + m_hDCCount--; + m_hDC = NULL; + ms_PaintHDC = NULL; } + //else: ms_PaintHDC still in use + } }