add ability to create wxEnhMetaFileDC based on a reference DC
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
dd36b5a3e5
commit
cc3445715d
@ -87,6 +87,13 @@ public:
|
||||
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();
|
||||
|
||||
|
@ -289,7 +289,9 @@ inline void wxCopyRectToRECT(const wxRect& rect, RECT& rc)
|
||||
// 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
|
||||
|
@ -218,6 +218,10 @@ public:
|
||||
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)
|
||||
@ -227,6 +231,10 @@ protected:
|
||||
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;
|
||||
@ -238,6 +246,24 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
||||
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;
|
||||
@ -252,7 +278,7 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
||||
rect.bottom = height;
|
||||
|
||||
// CreateEnhMetaFile() wants them in HIMETRIC
|
||||
PixelToHIMETRIC(&rect.right, &rect.bottom);
|
||||
PixelToHIMETRIC(&rect.right, &rect.bottom, hdcRef);
|
||||
|
||||
pRect = ▭
|
||||
}
|
||||
@ -262,7 +288,6 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
||||
pRect = (LPRECT)NULL;
|
||||
}
|
||||
|
||||
ScreenHDC hdcRef;
|
||||
m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename),
|
||||
pRect, description.wx_str());
|
||||
if ( !m_hDC )
|
||||
@ -318,6 +343,18 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename,
|
||||
{
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -304,10 +304,8 @@ int WXDLLEXPORT wxGetWindowId(WXHWND hWnd)
|
||||
// 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),
|
||||
@ -319,10 +317,8 @@ extern void PixelToHIMETRIC(LONG *x, LONG *y)
|
||||
*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),
|
||||
@ -334,6 +330,16 @@ extern void HIMETRICToPixel(LONG *x, LONG *y)
|
||||
*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__
|
||||
|
Loading…
Reference in New Issue
Block a user