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
This commit is contained in:
Vadim Zeitlin
1998-08-07 22:22:30 +00:00
parent d2aef3124b
commit 83626bfa72
2 changed files with 31 additions and 37 deletions

View File

@@ -57,8 +57,8 @@ class WXDLLEXPORT wxPaintDC: public wxDC
~wxPaintDC(void); ~wxPaintDC(void);
protected: protected:
static WXHDC m_staticPaintHDC ; static WXHDC ms_PaintHDC;
static int m_staticPaintCount ; static uint ms_PaintCount;
}; };
#endif #endif

View File

@@ -29,6 +29,7 @@
#endif #endif
#include "wx/dcclient.h" #include "wx/dcclient.h"
#include "wx/log.h"
#include <windows.h> #include <windows.h>
@@ -98,47 +99,40 @@ static PAINTSTRUCT g_paintStruct;
// Don't call Begin/EndPaint if it's already been called: // Don't call Begin/EndPaint if it's already been called:
// for example, if calling a base class OnPaint. // for example, if calling a base class OnPaint.
WXHDC wxPaintDC::m_staticPaintHDC = 0; WXHDC wxPaintDC::ms_PaintHDC = 0;
int wxPaintDC::m_staticPaintCount = 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)) wxCHECK_RET( canvas, "NULL canvas in wxPaintDC ctor" );
{
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 ;
}
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_hDC ) {
if ( !--ms_PaintCount ) {
if (m_staticPaintCount == 0) ::EndPaint((HWND)m_canvas->GetHWND(), &g_paintStruct);
{ m_hDCCount--;
if ( m_hDC && m_canvas) m_hDC = NULL;
{ ms_PaintHDC = NULL;
::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");
} }
//else: ms_PaintHDC still in use
}
} }