-// TODO (VZ) I have still some doubts about this hack and I still think that we
-// should store pairs of (hwnd, hdc) and not just the DC - what if
-// BeginPaint() was called on other window? It seems to work like
-// this, but to be sure about it we'd need to store hwnd too...
-
-WXHDC wxPaintDC::ms_PaintHDC = 0;
-size_t wxPaintDC::ms_PaintCount = 0; // count of ms_PaintHDC usage
+// VZ: initial implementation (by JACS) only remembered the last wxPaintDC
+// created and tried to reuse it - this was supposed to take care of a
+// situation when a derived class OnPaint() calls base class OnPaint()
+// because in this case ::BeginPaint() shouldn't be called second time.
+//
+// I'm not sure how useful this is, however we must remember the HWND
+// associated with the last HDC as well - otherwise we may (and will!) try
+// to reuse the HDC for another HWND which is a nice recipe for disaster.
+//
+// So we store a list of windows for which we already have the DC and not
+// just one single hDC. This seems to work, but I'm really not sure about
+// the usefullness of the whole idea - IMHO it's much better to not call
+// base class OnPaint() at all, or, if we really want to allow it, add a
+// "wxPaintDC *" parameter to wxPaintEvent which should be used if it's
+// !NULL instead of creating a new DC.
+
+IMPLEMENT_ABSTRACT_CLASS(wxPaintDCImpl, wxClientDCImpl)
+
+wxArrayDCInfo wxPaintDCImpl::ms_cache;
+
+wxPaintDCImpl::wxPaintDCImpl( wxDC *owner ) :
+ wxClientDCImpl( owner )
+{
+}