EMF::METAFILEDEVICECONTEXT Class Reference

Graphics Device Context. More...

`#include <libemf.h>`

Inheritance diagram for EMF::METAFILEDEVICECONTEXT:

## 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 Member Functions inherited from EMF::OBJECT
virtual | ~OBJECT ()
| OBJECTs have a virtual destructor.
| OBJECT (void)

## Data Fields

::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
Data Fields inherited from EMF::OBJECT
HGDIOBJ | handle

## 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

## METAFILEDEVICECONTEXT()

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.

## ~METAFILEDEVICECONTEXT()

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.

References deleteMetafile(), and records.

## Member Function Documentation

## appendHandle()

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.

References header, records, and EMF::METARECORD::size().

## appendRecord()

void EMF::METAFILEDEVICECONTEXT::appendRecord | ( | METARECORD * | record | ) |

inline

Add this record to the metafile.

Parameters

  record | standard graphics record

References header, records, and EMF::METARECORD::size().

## clearHandle()

void EMF::METAFILEDEVICECONTEXT::clearHandle | ( | DWORD | handle | ) |

inline

Clear the usage of this handle

References EMF::OBJECT::handle, and handles.

## deleteMetafile()

void EMF::METAFILEDEVICECONTEXT::deleteMetafile | ( | void |  | ) |

inline

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

References records.

Referenced by ~METAFILEDEVICECONTEXT().

## getType()

OBJECTTYPE EMF::METAFILEDEVICECONTEXT::getType | ( | void |  | ) | const

inline virtual

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

Implements EMF::OBJECT.

## mergePoint() [1/2]

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.

## mergePoint() [2/2]

void EMF::METAFILEDEVICECONTEXT::mergePoint | ( | const POINT & | p | ) |

inline

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

References header, max_device_point, min_device_point, update_frame, viewport_ext, viewport_org, window_ext, and window_org.

## nextHandle()

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.

References handles, and header.

## Field Documentation

## ds

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.

## emf_handles

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).

Referenced by EMF::EMRSELECTOBJECT::execute(), EMF::EMRDELETEOBJECT::execute(), EMF::EMRCREATEPEN::execute(), EMF::EMREXTCREATEPEN::execute(), EMF::EMRCREATEBRUSHINDIRECT::execute(), and EMF::EMREXTCREATEFONTINDIRECTW::execute().

## fp

::FILE* EMF::METAFILEDEVICECONTEXT::fp

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

## handles

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.

Referenced by clearHandle(), and nextHandle().

## header

ENHMETAHEADER* EMF::METAFILEDEVICECONTEXT::header

Serves double duty as the physical device description.

Referenced by appendHandle(), appendRecord(), mergePoint(), and nextHandle().

## records

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

All of the metafile records are stored in memory.

Referenced by appendHandle(), appendRecord(), deleteMetafile(), and ~METAFILEDEVICECONTEXT().

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

- libemf.h