X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad0ac642d5764497804bee2caad4fc1f20fc6cea..c5a12362967de64b04cd27ddf3d6a78c789d9f74:/include/wx/msw/dc.h diff --git a/include/wx/msw/dc.h b/include/wx/msw/dc.h index 58317dde2b..1a2e82afbb 100644 --- a/include/wx/msw/dc.h +++ b/include/wx/msw/dc.h @@ -9,12 +9,8 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_DC_H_ -#define _WX_DC_H_ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "dc.h" -#endif +#ifndef _WX_MSW_DC_H_ +#define _WX_MSW_DC_H_ #include "wx/defs.h" @@ -44,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 @@ -142,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); @@ -190,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[], @@ -220,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 // ----------------------------- @@ -263,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_ +