2000-01-13 18:39:48 -05:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: wx/msw/enhmeta.h
|
|
|
|
// Purpose: wxEnhMetaFile class for Win32
|
|
|
|
// Author: Vadim Zeitlin
|
|
|
|
// Modified by:
|
|
|
|
// Created: 13.01.00
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
2004-05-23 16:53:33 -04:00
|
|
|
// Licence: wxWindows licence
|
2000-01-13 18:39:48 -05:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef _WX_MSW_ENHMETA_H_
|
|
|
|
#define _WX_MSW_ENHMETA_H_
|
|
|
|
|
|
|
|
#include "wx/dc.h"
|
|
|
|
|
|
|
|
#if wxUSE_DRAG_AND_DROP
|
|
|
|
#include "wx/dataobj.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxEnhMetaFile: encapsulation of Win32 HENHMETAFILE
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class WXDLLEXPORT wxEnhMetaFile : public wxObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
wxEnhMetaFile(const wxString& file = wxEmptyString) : m_filename(file)
|
|
|
|
{ Init(); }
|
2005-01-18 15:23:48 -05:00
|
|
|
wxEnhMetaFile(const wxEnhMetaFile& metafile) : wxObject()
|
2000-01-13 18:39:48 -05:00
|
|
|
{ Init(); Assign(metafile); }
|
|
|
|
wxEnhMetaFile& operator=(const wxEnhMetaFile& metafile)
|
|
|
|
{ Free(); Assign(metafile); return *this; }
|
|
|
|
|
|
|
|
virtual ~wxEnhMetaFile()
|
|
|
|
{ Free(); }
|
|
|
|
|
|
|
|
// display the picture stored in the metafile on the given DC
|
|
|
|
bool Play(wxDC *dc, wxRect *rectBound = (wxRect *)NULL);
|
|
|
|
|
|
|
|
// accessors
|
|
|
|
bool Ok() const { return m_hMF != 0; }
|
|
|
|
|
|
|
|
wxSize GetSize() const;
|
|
|
|
int GetWidth() const { return GetSize().x; }
|
|
|
|
int GetHeight() const { return GetSize().y; }
|
|
|
|
|
|
|
|
const wxString& GetFileName() const { return m_filename; }
|
|
|
|
|
2000-02-25 18:49:41 -05:00
|
|
|
// copy the metafile to the clipboard: the width and height parameters are
|
|
|
|
// for backwards compatibility (with wxMetaFile) only, they are ignored by
|
|
|
|
// this method
|
|
|
|
bool SetClipboard(int width = 0, int height = 0);
|
|
|
|
|
2000-01-13 18:39:48 -05:00
|
|
|
// implementation
|
|
|
|
WXHANDLE GetHENHMETAFILE() const { return m_hMF; }
|
|
|
|
void SetHENHMETAFILE(WXHANDLE hMF) { Free(); m_hMF = hMF; }
|
|
|
|
|
|
|
|
protected:
|
2004-10-16 09:31:27 -04:00
|
|
|
void Init();
|
2000-01-13 18:39:48 -05:00
|
|
|
void Free();
|
|
|
|
void Assign(const wxEnhMetaFile& mf);
|
|
|
|
|
|
|
|
private:
|
|
|
|
wxString m_filename;
|
|
|
|
WXHANDLE m_hMF;
|
|
|
|
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxEnhMetaFile)
|
|
|
|
};
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxEnhMetaFileDC: allows to create a wxEnhMetaFile
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class WXDLLEXPORT wxEnhMetaFileDC : public wxDC
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// the ctor parameters specify the filename (empty for memory metafiles),
|
|
|
|
// the metafile picture size and the optional description/comment
|
|
|
|
wxEnhMetaFileDC(const wxString& filename = wxEmptyString,
|
|
|
|
int width = 0, int height = 0,
|
|
|
|
const wxString& description = wxEmptyString);
|
|
|
|
|
|
|
|
virtual ~wxEnhMetaFileDC();
|
|
|
|
|
|
|
|
// obtain a pointer to the new metafile (caller should delete it)
|
|
|
|
wxEnhMetaFile *Close();
|
|
|
|
|
2006-02-08 16:47:09 -05:00
|
|
|
protected:
|
2005-12-25 08:06:05 -05:00
|
|
|
virtual void DoGetSize(int *width, int *height) const;
|
|
|
|
|
2006-02-08 16:47:09 -05:00
|
|
|
private:
|
2005-12-25 08:06:05 -05:00
|
|
|
// size passed to ctor and returned by DoGetSize()
|
|
|
|
int m_width,
|
|
|
|
m_height;
|
|
|
|
|
2003-07-21 21:42:41 -04:00
|
|
|
DECLARE_DYNAMIC_CLASS_NO_COPY(wxEnhMetaFileDC)
|
2000-01-13 18:39:48 -05:00
|
|
|
};
|
|
|
|
|
2001-04-08 21:22:48 -04:00
|
|
|
#if wxUSE_DRAG_AND_DROP
|
|
|
|
|
2000-01-13 18:39:48 -05:00
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxEnhMetaFileDataObject is a specialization of wxDataObject for enh metafile
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// notice that we want to support both CF_METAFILEPICT and CF_ENHMETAFILE and
|
2000-02-25 18:49:41 -05:00
|
|
|
// so we derive from wxDataObject and not from wxDataObjectSimple
|
2000-01-13 18:39:48 -05:00
|
|
|
class WXDLLEXPORT wxEnhMetaFileDataObject : public wxDataObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// ctors
|
|
|
|
wxEnhMetaFileDataObject() { }
|
|
|
|
wxEnhMetaFileDataObject(const wxEnhMetaFile& metafile)
|
|
|
|
: m_metafile(metafile) { }
|
|
|
|
|
|
|
|
// virtual functions which you may override if you want to provide data on
|
|
|
|
// demand only - otherwise, the trivial default versions will be used
|
|
|
|
virtual void SetMetafile(const wxEnhMetaFile& metafile)
|
|
|
|
{ m_metafile = metafile; }
|
|
|
|
virtual wxEnhMetaFile GetMetafile() const
|
|
|
|
{ return m_metafile; }
|
|
|
|
|
|
|
|
// implement base class pure virtuals
|
|
|
|
virtual wxDataFormat GetPreferredFormat(Direction dir) const;
|
|
|
|
virtual size_t GetFormatCount(Direction dir) const;
|
|
|
|
virtual void GetAllFormats(wxDataFormat *formats, Direction dir) const;
|
|
|
|
virtual size_t GetDataSize(const wxDataFormat& format) const;
|
|
|
|
virtual bool GetDataHere(const wxDataFormat& format, void *buf) const;
|
|
|
|
virtual bool SetData(const wxDataFormat& format, size_t len,
|
|
|
|
const void *buf);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
wxEnhMetaFile m_metafile;
|
2003-07-21 21:42:41 -04:00
|
|
|
|
|
|
|
DECLARE_NO_COPY_CLASS(wxEnhMetaFileDataObject)
|
2000-01-13 18:39:48 -05:00
|
|
|
};
|
|
|
|
|
2001-04-08 21:22:48 -04:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// wxEnhMetaFileSimpleDataObject does derive from wxDataObjectSimple which
|
|
|
|
// makes it more convenient to use (it can be used with wxDataObjectComposite)
|
|
|
|
// at the price of not supoprting any more CF_METAFILEPICT but only
|
|
|
|
// CF_ENHMETAFILE
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
class WXDLLEXPORT wxEnhMetaFileSimpleDataObject : public wxDataObjectSimple
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// ctors
|
|
|
|
wxEnhMetaFileSimpleDataObject() : wxDataObjectSimple(wxDF_ENHMETAFILE) { }
|
|
|
|
wxEnhMetaFileSimpleDataObject(const wxEnhMetaFile& metafile)
|
|
|
|
: wxDataObjectSimple(wxDF_ENHMETAFILE), m_metafile(metafile) { }
|
|
|
|
|
|
|
|
// virtual functions which you may override if you want to provide data on
|
|
|
|
// demand only - otherwise, the trivial default versions will be used
|
|
|
|
virtual void SetEnhMetafile(const wxEnhMetaFile& metafile)
|
|
|
|
{ m_metafile = metafile; }
|
|
|
|
virtual wxEnhMetaFile GetEnhMetafile() const
|
|
|
|
{ return m_metafile; }
|
|
|
|
|
|
|
|
// implement base class pure virtuals
|
|
|
|
virtual size_t GetDataSize() const;
|
|
|
|
virtual bool GetDataHere(void *buf) const;
|
|
|
|
virtual bool SetData(size_t len, const void *buf);
|
|
|
|
|
2003-09-11 05:58:31 -04:00
|
|
|
virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const
|
|
|
|
{ return GetDataSize(); }
|
|
|
|
virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format),
|
|
|
|
void *buf) const
|
|
|
|
{ return GetDataHere(buf); }
|
|
|
|
virtual bool SetData(const wxDataFormat& WXUNUSED(format),
|
|
|
|
size_t len, const void *buf)
|
|
|
|
{ return SetData(len, buf); }
|
|
|
|
|
2001-04-08 21:22:48 -04:00
|
|
|
protected:
|
|
|
|
wxEnhMetaFile m_metafile;
|
2003-07-21 21:42:41 -04:00
|
|
|
|
|
|
|
DECLARE_NO_COPY_CLASS(wxEnhMetaFileSimpleDataObject)
|
2001-04-08 21:22:48 -04:00
|
|
|
};
|
|
|
|
|
2000-01-13 18:39:48 -05:00
|
|
|
#endif // wxUSE_DRAG_AND_DROP
|
|
|
|
|
|
|
|
#endif // _WX_MSW_ENHMETA_H_
|