int width = 0, int height = 0,
const wxString& description = wxEmptyString);
+ // as above, but takes reference DC as first argument to take resolution,
+ // size, font metrics etc. from
+ wxEnhMetaFileDC(const wxDC& referenceDC,
+ const wxString& filename = wxEmptyString,
+ int width = 0, int height = 0,
+ const wxString& description = wxEmptyString);
+
// obtain a pointer to the new metafile (caller should delete it)
wxEnhMetaFile *Close();
// translations between HIMETRIC units (which OLE likes) and pixels (which are
// liked by all the others) - implemented in msw/utilsexc.cpp
extern void HIMETRICToPixel(LONG *x, LONG *y);
+extern void HIMETRICToPixel(LONG *x, LONG *y, HDC hdcRef);
extern void PixelToHIMETRIC(LONG *x, LONG *y);
+extern void PixelToHIMETRIC(LONG *x, LONG *y, HDC hdcRef);
// Windows convention of the mask is opposed to the wxWidgets one, so we need
// to invert the mask each time we pass one/get one to/from Windows
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;
int width, int height,
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 )
+{
+ 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 )
{
}
+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
// Metafile helpers
// ----------------------------------------------------------------------------
-extern void PixelToHIMETRIC(LONG *x, LONG *y)
+void PixelToHIMETRIC(LONG *x, LONG *y, HDC hdcRef)
{
- ScreenHDC hdcRef;
-
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
*y /= iHeightPels;
}
-extern void HIMETRICToPixel(LONG *x, LONG *y)
+void HIMETRICToPixel(LONG *x, LONG *y, HDC hdcRef)
{
- ScreenHDC hdcRef;
-
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
*y /= (iHeightMM * 100);
}
+void HIMETRICToPixel(LONG *x, LONG *y)
+{
+ HIMETRICToPixel(x, y, ScreenHDC());
+}
+
+void PixelToHIMETRIC(LONG *x, LONG *y)
+{
+ PixelToHIMETRIC(x, y, ScreenHDC());
+}
+
void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2)
{
#ifdef __WXWINCE__