disallow creation of wxDC objects and made wxDC an ABC; use wxDCTemp instead of wxDC in wx code; fixed WinCE bug with deleting a DC which should be released in wxListBox::MSWOnMeasure()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36564 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_DC_H_
|
||||
#define _WX_DC_H_
|
||||
#ifndef _WX_MSW_DC_H_
|
||||
#define _WX_MSW_DC_H_
|
||||
|
||||
#include "wx/defs.h"
|
||||
|
||||
@@ -40,10 +40,12 @@ public:
|
||||
};
|
||||
#endif
|
||||
|
||||
// this is an ABC: use one of the derived classes to create a DC associated
|
||||
// with a window, screen, printer and so on
|
||||
class WXDLLEXPORT wxDC : public wxDCBase
|
||||
{
|
||||
public:
|
||||
wxDC();
|
||||
wxDC(WXHDC hDC) { Init(); m_hDC = hDC; }
|
||||
~wxDC();
|
||||
|
||||
// implement base class pure virtuals
|
||||
@@ -138,6 +140,26 @@ public:
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void Init()
|
||||
{
|
||||
m_canvas = NULL;
|
||||
m_bOwnsDC = false;
|
||||
m_hDC = NULL;
|
||||
|
||||
m_oldBitmap = NULL;
|
||||
m_oldPen = NULL;
|
||||
m_oldBrush = NULL;
|
||||
m_oldFont = NULL;
|
||||
|
||||
#if wxUSE_PALETTE
|
||||
m_oldPalette = NULL;
|
||||
#endif // wxUSE_PALETTE
|
||||
}
|
||||
|
||||
// create an uninitialized DC: this should be only used by the derived
|
||||
// classes
|
||||
wxDC() { Init(); }
|
||||
|
||||
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
|
||||
int style = wxFLOOD_SURFACE);
|
||||
|
||||
@@ -186,7 +208,6 @@ protected:
|
||||
virtual void DoGetClippingBox(wxCoord *x, wxCoord *y,
|
||||
wxCoord *w, wxCoord *h) const;
|
||||
|
||||
virtual void DoGetSize(int *width, int *height) const;
|
||||
virtual void DoGetSizeMM(int* width, int* height) const;
|
||||
|
||||
virtual void DoDrawLines(int n, wxPoint points[],
|
||||
@@ -216,6 +237,17 @@ protected:
|
||||
// common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion()
|
||||
void SetClippingHrgn(WXHRGN hrgn);
|
||||
|
||||
// implementation of DoGetSize() for wxScreen/PrinterDC: this simply
|
||||
// returns the size of the entire device this DC is associated with
|
||||
//
|
||||
// notice that we intentionally put it in a separate function instead of
|
||||
// DoGetSize() itself because we want it to remain pure virtual both
|
||||
// because each derived class should take care to define it as needed (this
|
||||
// implementation is not at all always appropriate) and because we want
|
||||
// wxDC to be an ABC to prevent it from being created directly
|
||||
void GetDeviceSize(int *width, int *height) const;
|
||||
|
||||
|
||||
// MSW-specific member variables
|
||||
// -----------------------------
|
||||
|
||||
@@ -259,12 +291,29 @@ protected:
|
||||
class WXDLLEXPORT wxDCTemp : public wxDC
|
||||
{
|
||||
public:
|
||||
wxDCTemp(WXHDC hdc) { SetHDC(hdc); }
|
||||
virtual ~wxDCTemp() { SetHDC((WXHDC)NULL); }
|
||||
wxDCTemp(WXHDC hdc) : wxDC(hdc)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~wxDCTemp()
|
||||
{
|
||||
// prevent base class dtor from freeing it
|
||||
SetHDC((WXHDC)NULL);
|
||||
}
|
||||
|
||||
virtual void DoGetSize(int *w, int *h) const
|
||||
{
|
||||
wxFAIL_MSG( _T("no way to retrieve the size of generic DC") );
|
||||
|
||||
if ( w )
|
||||
*w = 0;
|
||||
if ( h )
|
||||
*h = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
DECLARE_NO_COPY_CLASS(wxDCTemp)
|
||||
};
|
||||
|
||||
#endif
|
||||
// _WX_DC_H_
|
||||
#endif // _WX_MSW_DC_H_
|
||||
|
||||
|
Reference in New Issue
Block a user