EMF: EMF::METAFILEDEVICECONTEXT Class Reference

# EMF::METAFILEDEVICECONTEXT Class Reference

Graphics Device Context. More...

`#include <libemf.h>`

Inheritance diagram for EMF::METAFILEDEVICECONTEXT:

List of all members.

## Public Member Functions
| METAFILEDEVICECONTEXT (FILE *fp_, const RECT *size, LPCWSTR description_w)
virtual | ~METAFILEDEVICECONTEXT ()
OBJECTTYPE | getType (void) const
DWORD | nextHandle (void)
void | clearHandle (DWORD handle)
void | appendRecord (METARECORD *record)
void | appendHandle (METARECORD *record)
void | deleteMetafile (void)
void | mergePoint (const LONG &x, const LONG &y)
void | mergePoint (const POINT &p)
## Public Attributes
::FILE * | fp
DATASTREAM | ds
ENHMETAHEADER * | header
std::vector< EMF::METARECORD * > | records
SIZEL | resolution
| The resolution in DPI of the *reference* DC.
SIZEL | viewport_ext
| The extent of the viewport.
POINT | viewport_org
| The origin of the viewport.
SIZEL | window_ext
| The extent of the window.
POINT | window_org
| The origin of the window.
bool | update_frame
| Update the frame automatically?
POINT | min_device_point
| The lft/top-most painted point in device units.
POINT | max_device_point
| The rgt/btm-most painted point in device units.
POINT | point
| The current point.
PEN * | pen
| The current pen.
BRUSH * | brush
| The current brush.
FONT * | font
| The current font.
PALETTE * | palette
| The current palette.
UINT | text_alignment
| The current text alignment.
COLORREF | text_color
| The current text foreground color.
COLORREF | bk_color
| The current background color.
INT | bk_mode
| The current background mode.
INT | polyfill_mode
| The current polygon fill mode.
INT | map_mode
| The current mapping mode.
FLOAT | miter_limit
| The current miter length limit.
std::vector< bool > | handles
std::map< HGDIOBJ, HGDIOBJ > | emf_handles

## Detailed Description

Graphics Device Context.

Almost all GDI graphics calls require a device context (except those which create graphics objects such as pens and fonts). This is a specific context which renders to a metafile. There is a one-to-one correspondence between the device context and the metafile.

## Constructor & Destructor Documentation

EMF::METAFILEDEVICECONTEXT::METAFILEDEVICECONTEXT | ( | FILE * | fp_,
|  | const RECT * | size,
|  | LPCWSTR | description_w |
| ) |  |  | `[inline]`

Most graphics programs seem to want to handle the opening and closing of files themselves, so this is an extension to the w32 interface.

Parameters:

  | fp_ | stdio pointer to an open file. May be null.
  | size | the rectangle describing the position and size of the metafile on the "page". May be null.
  | description_w | a UNICODE string describing the metafile. The format must be "some text\0some more text\0\0". May be null.

virtual EMF::METAFILEDEVICECONTEXT::~METAFILEDEVICECONTEXT | ( |  | ) | `[inline, virtual]`

Destructor frees all the graphics objects which may have been allocated. Now, it also frees any metarecords which it might hold, too.

## Member Function Documentation

void EMF::METAFILEDEVICECONTEXT::appendHandle | ( | METARECORD * | record | ) | `[inline]`

Add this record to the metafile.

Parameters:

  | record | this record is an object so it increments the handle count as well.

void EMF::METAFILEDEVICECONTEXT::appendRecord | ( | METARECORD * | record | ) | `[inline]`

Add this record to the metafile.

Parameters:

  | record | standard graphics record

void EMF::METAFILEDEVICECONTEXT::clearHandle | ( | DWORD | handle | ) | `[inline]`

Clear the usage of this handle

void EMF::METAFILEDEVICECONTEXT::deleteMetafile | ( | void |  | ) | `[inline]`

Delete all the records from the metafile. This would seem to include deleting the header record as well.

OBJECTTYPE EMF::METAFILEDEVICECONTEXT::getType | ( | void |  | ) | const`[inline, virtual]`

Return the type of this object (could probably do better with RTTI()).

Implements EMF::OBJECT.

void EMF::METAFILEDEVICECONTEXT::mergePoint | ( | const POINT & | p | ) | `[inline]`

Take the given point and determine if it enlarges the "painted" area of the device.

void EMF::METAFILEDEVICECONTEXT::mergePoint | ( | const LONG & | x,
|  | const LONG & | y |
| ) |  |  | `[inline]`

Somewhat superfluous, except checker doesn't understand the initialization of automatic structures in the declaration.

DWORD EMF::METAFILEDEVICECONTEXT::nextHandle | ( | void |  | ) | `[inline]`

Scan the bit vector of used handles and return the index of the first free bit as this objects metafile handle.

## Member Data Documentation

DATASTREAM EMF::METAFILEDEVICECONTEXT::ds

All i/o to the metafile is wrapped by this class so that byte swapping on big-endian machines is transparent.

std::map< HGDIOBJ, HGDIOBJ > EMF::METAFILEDEVICECONTEXT::emf_handles

This map holds the *current* mapping between EMF handles and global object handles as a metafile is played back (with PlayEnhMetaFile).

::FILE* EMF::METAFILEDEVICECONTEXT::fp

If it is a file-based metafile, then this pointer is not null.

std::vector< bool > EMF::METAFILEDEVICECONTEXT::handles

For compatibility, it appears that metafile handles are reused as objects are deleted. Attempt to emulate that behavior with a bit vector of used metafile handles.

ENHMETAHEADER* EMF::METAFILEDEVICECONTEXT::header

Serves double duty as the physical device description.

std::vector< EMF::METARECORD* > EMF::METAFILEDEVICECONTEXT::records

All of the metafile records are stored in memory.

The documentation for this class was generated from the following file:

- libemf.h