| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: metafile.h
- // Purpose: interface of wxMetafileDC
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxMetafileDC
- This is a type of device context that allows a metafile object to be
- created (Windows only), and has most of the characteristics of a normal
- @b wxDC.
- The wxMetafileDC::Close member must be called after drawing into the
- device context, to return a metafile. The only purpose for this at
- present is to allow the metafile to be copied to the clipboard
- (see wxMetafile).
- Adding metafile capability to an application should be easy if you
- already write to a wxDC; simply pass the wxMetafileDC to your drawing
- function instead. You may wish to conditionally compile this code so it
- is not compiled under X (although no harm will result if you leave it in).
- Note that a metafile saved to disk is in standard Windows metafile format,
- and cannot be imported into most applications. To make it importable,
- call the function ::wxMakeMetafilePlaceable after closing your disk-based
- metafile device context.
- @library{wxcore}
- @category{dc}
- @see wxMetafile, wxDC
- */
- class wxMetafileDC : public wxDC
- {
- public:
- /**
- Constructor.
- If no filename is passed, the metafile is created in memory.
- */
- wxMetafileDC(const wxString& filename = wxEmptyString);
- /**
- Destructor.
- */
- ~wxMetafileDC();
- /**
- This must be called after the device context is finished with.
- A metafile is returned, and ownership of it passes to the calling
- application (so it should be destroyed explicitly).
- */
- wxMetafile* Close();
- };
- /**
- @class wxMetafile
- A @b wxMetafile represents the MS Windows metafile object, so metafile
- operations have no effect in X. In wxWidgets, only sufficient functionality
- has been provided for copying a graphic to the clipboard; this may be extended
- in a future version.
- Presently, the only way of creating a metafile is to use a wxMetafileDC.
- @onlyfor{wxmsw}
- @library{wxcore}
- @category{gdi}
- @see wxMetafileDC
- */
- class wxMetafile : public wxObject
- {
- public:
- /**
- Constructor.
- If a filename is given, the Windows disk metafile is read in.
- Check whether this was performed successfully by using the IsOk() member.
- */
- wxMetafile(const wxString& filename = wxEmptyString);
- /**
- Destructor.
- See @ref overview_refcount_destruct for more info.
- */
- ~wxMetafile();
- /**
- Returns @true if the metafile is valid.
- */
- bool IsOk();
- /**
- Plays the metafile into the given device context, returning
- @true if successful.
- */
- bool Play(wxDC* dc);
- /**
- Passes the metafile data to the clipboard. The metafile can no longer be
- used for anything, but the wxMetafile object must still be destroyed by
- the application.
- Below is a example of metafile, metafile device context and clipboard use
- from the @c hello.cpp example. Note the way the metafile dimensions
- are passed to the clipboard, making use of the device context's ability
- to keep track of the maximum extent of drawing commands.
- @code
- wxMetafileDC dc;
- if (dc.IsOk())
- {
- Draw(dc, false);
- wxMetafile *mf = dc.Close();
- if (mf)
- {
- bool success = mf->SetClipboard((int)(dc.MaxX() + 10), (int)(dc.MaxY() + 10));
- delete mf;
- }
- }
- @endcode
- */
- bool SetClipboard(int width = 0, int height = 0);
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_gdi */
- //@{
- /**
- Given a filename for an existing, valid metafile (as constructed using
- wxMetafileDC) makes it into a placeable metafile by prepending a header
- containing the given bounding box. The bounding box may be obtained from a
- device context after drawing into it, using the functions wxDC::MinX(),
- wxDC::MinY(), wxDC::MaxX() and wxDC::MaxY().
- In addition to adding the placeable metafile header, this function adds the
- equivalent of the following code to the start of the metafile data:
- @code
- SetMapMode(dc, MM_ANISOTROPIC);
- SetWindowOrg(dc, minX, minY);
- SetWindowExt(dc, maxX - minX, maxY - minY);
- @endcode
- This simulates the wxMM_TEXT mapping mode, which wxWidgets assumes.
- Placeable metafiles may be imported by many Windows applications, and can
- be used in RTF (Rich Text Format) files.
- @a scale allows the specification of scale for the metafile.
- This function is only available under Windows.
- @header{wx/metafile.h}
- */
- bool wxMakeMetafilePlaceable(const wxString& filename,
- int minX, int minY,
- int maxX, int maxY,
- float scale = 1.0);
- //@}
|