1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxMemoryDC class
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation
14 #pragma implementation "dcmemory.h"
17 // For compilers that support precompilation, includes "wx.h".
18 #include "wx/wxprec.h"
27 #include "wx/dcmemory.h"
31 #if !USE_SHARED_LIBRARY
32 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC
, wxDC
)
40 wxMemoryDC::wxMemoryDC(void)
42 m_hDC
= (WXHDC
) ::CreateCompatibleDC(NULL
);
46 SetBrush(*wxWHITE_BRUSH
);
50 wxMemoryDC::wxMemoryDC(wxDC
*old_dc
)
52 old_dc
->BeginDrawing();
54 m_hDC
= (WXHDC
) ::CreateCompatibleDC((HDC
) old_dc
->GetHDC());
59 SetBrush(*wxWHITE_BRUSH
);
63 wxMemoryDC::~wxMemoryDC(void)
67 void wxMemoryDC::SelectObject(const wxBitmap
& bitmap
)
69 // Select old bitmap out of the device context
72 ::SelectObject((HDC
) m_hDC
, (HBITMAP
) m_oldBitmap
);
73 if (m_selectedBitmap
.Ok())
75 m_selectedBitmap
.SetSelectedInto(NULL
);
76 m_selectedBitmap
= wxNullBitmap
;
80 // Do own check for whether the bitmap is already selected into
82 if (bitmap
.GetSelectedInto() && (bitmap
.GetSelectedInto() != this))
84 wxFatalError("Error in wxMemoryDC::SelectObject\nBitmap is selected in another wxMemoryDC.\nDelete the first wxMemoryDC or use SelectObject(NULL)");
88 m_selectedBitmap
= bitmap
;
90 if (!m_selectedBitmap
.Ok())
93 m_selectedBitmap
.SetSelectedInto(this);
95 wxDebugMsg("wxMemoryDC::SelectObject: Selecting HBITMAP %X\n", m_selectedBitmap
.GetHBITMAP());
97 HBITMAP bm
= ::SelectObject((HDC
) m_hDC
, (HBITMAP
) m_selectedBitmap
.GetHBITMAP());
101 wxFatalError("Error in wxMemoryDC::SelectObject\nBitmap may not be loaded, or may be selected in another wxMemoryDC.\nDelete the first wxMemoryDC to deselect bitmap.");
103 else if (!m_oldBitmap
)
104 m_oldBitmap
= (WXHBITMAP
) bm
;
107 void wxMemoryDC::GetSize(int *width
, int *height
) const
109 if (!m_selectedBitmap
.Ok())
111 *width
= 0; *height
= 0;
114 *width
= m_selectedBitmap
.GetWidth();
115 *height
= m_selectedBitmap
.GetHeight();