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,
|
int width = 0, int height = 0,
|
||||||
const wxString& description = wxEmptyString);
|
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)
|
// obtain a pointer to the new metafile (caller should delete it)
|
||||||
wxEnhMetaFile *Close();
|
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
|
// translations between HIMETRIC units (which OLE likes) and pixels (which are
|
||||||
// liked by all the others) - implemented in msw/utilsexc.cpp
|
// liked by all the others) - implemented in msw/utilsexc.cpp
|
||||||
extern void HIMETRICToPixel(LONG *x, LONG *y);
|
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);
|
||||||
|
extern void PixelToHIMETRIC(LONG *x, LONG *y, HDC hdcRef);
|
||||||
|
|
||||||
// Windows convention of the mask is opposed to the wxWidgets one, so we need
|
// 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
|
// to invert the mask each time we pass one/get one to/from Windows
|
||||||
|
@ -218,6 +218,10 @@ public:
|
|||||||
wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
|
wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
|
||||||
const wxString& filename, int width, int height,
|
const wxString& filename, int width, int height,
|
||||||
const wxString& description );
|
const wxString& description );
|
||||||
|
wxEnhMetaFileDCImpl( wxEnhMetaFileDC *owner,
|
||||||
|
const wxDC& referenceDC,
|
||||||
|
const wxString& filename, int width, int height,
|
||||||
|
const wxString& description );
|
||||||
virtual ~wxEnhMetaFileDCImpl();
|
virtual ~wxEnhMetaFileDCImpl();
|
||||||
|
|
||||||
// obtain a pointer to the new metafile (caller should delete it)
|
// obtain a pointer to the new metafile (caller should delete it)
|
||||||
@ -227,6 +231,10 @@ protected:
|
|||||||
virtual void DoGetSize(int *width, int *height) const;
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void Create(HDC hdcRef,
|
||||||
|
const wxString& filename, int width, int height,
|
||||||
|
const wxString& description);
|
||||||
|
|
||||||
// size passed to ctor and returned by DoGetSize()
|
// size passed to ctor and returned by DoGetSize()
|
||||||
int m_width,
|
int m_width,
|
||||||
m_height;
|
m_height;
|
||||||
@ -238,6 +246,24 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
|||||||
int width, int height,
|
int width, int height,
|
||||||
const wxString& description )
|
const wxString& description )
|
||||||
: wxMSWDCImpl( owner )
|
: 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_width = width;
|
||||||
m_height = height;
|
m_height = height;
|
||||||
@ -252,7 +278,7 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
|||||||
rect.bottom = height;
|
rect.bottom = height;
|
||||||
|
|
||||||
// CreateEnhMetaFile() wants them in HIMETRIC
|
// CreateEnhMetaFile() wants them in HIMETRIC
|
||||||
PixelToHIMETRIC(&rect.right, &rect.bottom);
|
PixelToHIMETRIC(&rect.right, &rect.bottom, hdcRef);
|
||||||
|
|
||||||
pRect = ▭
|
pRect = ▭
|
||||||
}
|
}
|
||||||
@ -262,7 +288,6 @@ wxEnhMetaFileDCImpl::wxEnhMetaFileDCImpl( wxEnhMetaFileDC* owner,
|
|||||||
pRect = (LPRECT)NULL;
|
pRect = (LPRECT)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenHDC hdcRef;
|
|
||||||
m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename),
|
m_hDC = (WXHDC)::CreateEnhMetaFile(hdcRef, GetMetaFileName(filename),
|
||||||
pRect, description.wx_str());
|
pRect, description.wx_str());
|
||||||
if ( !m_hDC )
|
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()
|
wxEnhMetaFile *wxEnhMetaFileDC::Close()
|
||||||
{
|
{
|
||||||
wxEnhMetaFileDCImpl * const
|
wxEnhMetaFileDCImpl * const
|
||||||
|
@ -304,10 +304,8 @@ int WXDLLEXPORT wxGetWindowId(WXHWND hWnd)
|
|||||||
// Metafile helpers
|
// Metafile helpers
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
extern void PixelToHIMETRIC(LONG *x, LONG *y)
|
void PixelToHIMETRIC(LONG *x, LONG *y, HDC hdcRef)
|
||||||
{
|
{
|
||||||
ScreenHDC hdcRef;
|
|
||||||
|
|
||||||
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
|
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
|
||||||
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
|
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
|
||||||
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
|
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
|
||||||
@ -319,10 +317,8 @@ extern void PixelToHIMETRIC(LONG *x, LONG *y)
|
|||||||
*y /= iHeightPels;
|
*y /= iHeightPels;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void HIMETRICToPixel(LONG *x, LONG *y)
|
void HIMETRICToPixel(LONG *x, LONG *y, HDC hdcRef)
|
||||||
{
|
{
|
||||||
ScreenHDC hdcRef;
|
|
||||||
|
|
||||||
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
|
int iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE),
|
||||||
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
|
iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE),
|
||||||
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
|
iWidthPels = GetDeviceCaps(hdcRef, HORZRES),
|
||||||
@ -334,6 +330,16 @@ extern void HIMETRICToPixel(LONG *x, LONG *y)
|
|||||||
*y /= (iHeightMM * 100);
|
*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)
|
void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2)
|
||||||
{
|
{
|
||||||
#ifdef __WXWINCE__
|
#ifdef __WXWINCE__
|
||||||
|
Loading…
Reference in New Issue
Block a user