}
// ----------------------------------------------------------------------------
-// wxEnhMetaFileDC
+// wxEnhMetaFileDCImpl
// ----------------------------------------------------------------------------
class wxEnhMetaFileDCImpl : public wxMSWDCImpl
wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
const wxString& filename, int width, int height,
const wxString& description );
+ wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
+ const wxDC& referenceDC,
+ const wxString& filename, int width, int height,
+ const wxString& description );
virtual ~wxEnhMetaFileDCImpl();
// obtain a pointer to the new metafile (caller should delete it)
virtual void DoGetSize(int *width, int *height) const;
private:
+ void Create(HDC hdcRef,
+ const wxString& filename, int width, int height,
+ const wxString& description);
+
// size passed to ctor and returned by DoGetSize()
int m_width,
m_height;
};
-IMPLEMENT_ABSTRACT_CLASS(wxEnhMetaFileDC, wxDC)
-
-wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename,
+wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
+ const wxString& filename,
int width, int height,
- const wxString& description)
- : wxDC(new wxEnhMetaFileDCImpl(this,
- filename,
- width, height,
- description))
+ const wxString& description )
+ : wxMSWDCImpl( owner )
{
+ Create(ScreenHDC(), filename, width, height, description);
}
-
wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
+ const wxDC& referenceDC,
const wxString& filename,
int width, int height,
const wxString& description )
- : wxMSWDCImpl( owner )
+ : wxMSWDCImpl( owner )
+{
+ Create(GetHdcOf(referenceDC), filename, width, height, description);
+}
+
+void wxEnhMetaFileDCImpl::Create(HDC hdcRef,
+ const wxString& filename,
+ int width, int height,
+ const wxString& description)
{
m_width = width;
m_height = height;
rect.bottom = height;
// CreateEnhMetaFile() wants them in HIMETRIC
- PixelToHIMETRIC(&rect.right, &rect.bottom);
+ PixelToHIMETRIC(&rect.right, &rect.bottom, hdcRef);
pRect = ▭
}
pRect = (LPRECT)NULL;
}
- ScreenHDC hdcRef;
m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename),
pRect, description.wx_str());
if ( !m_hDC )
m_hDC = 0;
}
+// ----------------------------------------------------------------------------
+// wxEnhMetaFileDC
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxEnhMetaFileDC, wxDC)
+
+wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename,
+ int width, int height,
+ const wxString& description)
+ : wxDC(new wxEnhMetaFileDCImpl(this,
+ filename,
+ width, height,
+ description))
+{
+}
+
+wxEnhMetaFileDC::wxEnhMetaFileDC(const wxDC& referenceDC,
+ const wxString& filename,
+ int width, int height,
+ const wxString& description)
+ : wxDC(new wxEnhMetaFileDCImpl(this,
+ referenceDC,
+ filename,
+ width, height,
+ description))
+{
+}
+
+wxEnhMetaFile *wxEnhMetaFileDC::Close()
+{
+ wxEnhMetaFileDCImpl * const
+ impl = static_cast<wxEnhMetaFileDCImpl *>(GetImpl());
+ wxCHECK_MSG( impl, NULL, _T("no wxEnhMetaFileDC implementation") );
+
+ return impl->Close();
+}
+
#if wxUSE_DRAG_AND_DROP
// ----------------------------------------------------------------------------