You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
7.3 KiB
180 lines
7.3 KiB
/*************************************************************************\
|
|
* Module Name: metadef.h
|
|
*
|
|
* This file contains the definitions and constants for metafile.
|
|
*
|
|
* Created: 12-June-1991 13:46:00
|
|
* Author: Hock San Lee [hockl]
|
|
*
|
|
* Copyright (c) 1991-1999 Microsoft Corporation
|
|
\*************************************************************************/
|
|
|
|
// Metafile header sizes for existing valid versions
|
|
|
|
// Minimum header size
|
|
#define META_HDR_SIZE_MIN META_HDR_SIZE_VERSION_1
|
|
// Original header
|
|
#define META_HDR_SIZE_VERSION_1 88
|
|
|
|
|
|
// Header with OpenGL extensions
|
|
#define META_HDR_SIZE_VERSION_2 100
|
|
|
|
// Header with sizlMicrometer extensions
|
|
#define META_HDR_SIZE_VERSION_3 108
|
|
|
|
|
|
// Maximum header size
|
|
#define META_HDR_SIZE_MAX sizeof(ENHMETAHEADER)
|
|
|
|
// Metafile version constants
|
|
|
|
#define META_FORMAT_ENHANCED 0x10000 // Windows NT format
|
|
#define META_FORMAT_WINDOWS 0x300 // Windows 3.x format
|
|
|
|
// Metafile record structure.
|
|
|
|
typedef struct tagENHMETABOUNDRECORD
|
|
{
|
|
DWORD iType; // Record type EMR_
|
|
DWORD nSize; // Record size in bytes
|
|
RECTL rclBounds; // Inclusive-inclusive bounds in device units
|
|
DWORD dParm[1]; // Parameters
|
|
} ENHMETABOUNDRECORD, *PENHMETABOUNDRECORD;
|
|
|
|
// Flags for iType field in ENHMETARECORD.
|
|
// They are to be used in future to support backward systems only.
|
|
// See PlayEnhMetaFileRecord for details.
|
|
|
|
#define EMR_NOEMBED 0x80000000 // do not include record in embedding
|
|
#define EMR_ACCUMBOUNDS 0x40000000 // record has bounds
|
|
|
|
typedef struct tagMETALINK16
|
|
{
|
|
DWORD metalink;
|
|
struct tagMETALINK16 *pmetalink16Next;
|
|
HANDLE hobj;
|
|
PVOID pv;
|
|
|
|
// WARNING: fields before this must match the LINK structure.
|
|
|
|
DWORD cMetaDC16;
|
|
HDC ahMetaDC16[1];
|
|
} METALINK16, *PMETALINK16;
|
|
|
|
// Public GdiComment.
|
|
|
|
typedef struct tagEMRGDICOMMENT_PUBLIC
|
|
{
|
|
EMR emr;
|
|
DWORD cbData; // Size of following fields and data
|
|
DWORD ident; // GDICOMMENT_IDENTIFIER
|
|
DWORD iComment; // Comment type e.g. GDICOMMENT_WINDOWS_METAFILE
|
|
} EMRGDICOMMENT_PUBLIC, *PEMRGDICOMMENT_PUBLIC;
|
|
|
|
// Public GdiComment for embedded Windows metafile.
|
|
|
|
typedef struct tagEMRGDICOMMENT_WINDOWS_METAFILE
|
|
{
|
|
EMR emr;
|
|
DWORD cbData; // Size of following fields and windows metafile
|
|
DWORD ident; // GDICOMMENT_IDENTIFIER
|
|
DWORD iComment; // GDICOMMENT_WINDOWS_METAFILE
|
|
DWORD nVersion; // 0x300 or 0x100
|
|
DWORD nChecksum; // Checksum
|
|
DWORD fFlags; // Compression etc. This is currently zero.
|
|
DWORD cbWinMetaFile; // Size of windows metafile data in bytes
|
|
// The windows metafile data follows here
|
|
} EMRGDICOMMENT_WINDOWS_METAFILE, *PEMRGDICOMMENT_WINDOWS_METAFILE;
|
|
|
|
// Public GdiComment for begin group.
|
|
|
|
typedef struct tagEMRGDICOMMENT_BEGINGROUP
|
|
{
|
|
EMR emr;
|
|
DWORD cbData; // Size of following fields and all data
|
|
DWORD ident; // GDICOMMENT_IDENTIFIER
|
|
DWORD iComment; // GDICOMMENT_BEGINGROUP
|
|
RECTL rclOutput; // Output rectangle in logical coords.
|
|
DWORD nDescription; // Number of chars in the unicode description
|
|
// string that follows this field. This is 0
|
|
// if there is no description string.
|
|
} EMRGDICOMMENT_BEGINGROUP, *PEMRGDICOMMENT_BEGINGROUP;
|
|
|
|
// Public GdiComment for end group.
|
|
|
|
typedef EMRGDICOMMENT_PUBLIC EMRGDICOMMENT_ENDGROUP;
|
|
typedef PEMRGDICOMMENT_PUBLIC PEMRGDICOMMENT_ENDGROUP;
|
|
|
|
// Public GdiComment for multiple formats.
|
|
|
|
typedef struct tagEMRGDICOMMENT_MULTIFORMATS
|
|
{
|
|
EMR emr;
|
|
DWORD cbData; // Size of following fields and all data
|
|
DWORD ident; // GDICOMMENT_IDENTIFIER
|
|
DWORD iComment; // GDICOMMENT_MULTIFORMATS
|
|
RECTL rclOutput; // Output rectangle in logical coords.
|
|
DWORD nFormats; // Number of formats contained in the record
|
|
EMRFORMAT aemrformat[1]; // Array of EMRFORMAT structures in order of
|
|
// preference. This is followed by the data
|
|
// for each format.
|
|
} EMRGDICOMMENT_MULTIFORMATS, *PEMRGDICOMMENT_MULTIFORMATS;
|
|
|
|
// iComment flags
|
|
|
|
#define GDICOMMENT_NOEMBED 0x80000000 // do not include comment in
|
|
// embedding
|
|
#define GDICOMMENT_ACCUMBOUNDS 0x40000000 // has logical rectangle bounds
|
|
// that follows the iComment field
|
|
|
|
// ExtEscape to output encapsulated PostScript file.
|
|
|
|
typedef struct tagEPSDATA
|
|
{
|
|
DWORD cbData; // Size of the structure and EPS data in bytes.
|
|
DWORD nVersion; // Language level, e.g. 1 for level 1 PostScript.
|
|
POINT aptl[3]; // Output parallelogram in 28.4 FIX device coords.
|
|
// This is followed by the EPS data.
|
|
} EPSDATA, *PEPSDATA;
|
|
|
|
|
|
/**************************************************************************\
|
|
*
|
|
* <----------------------------------------------\
|
|
* hash \
|
|
* \
|
|
* +-----+ |
|
|
* 0| I16 | metalink16 |
|
|
* 1| | |
|
|
* 2| | +--------+ +--------+ |
|
|
* 3| |------>|idc/iobj| /->|metalink| |
|
|
* 4| | |hobj | / |hobj | |
|
|
* 5| | |pmlNext |---/ |pmlNext |--/ |
|
|
* | | |16bit mf| |16bit mf| |
|
|
* .| | +--------+ +--------+ |
|
|
* .| | | |
|
|
* .| | | |
|
|
* | | /--/ |
|
|
* n-1| | / |
|
|
* +-----+ | |
|
|
* | LDC(idc) MDC |
|
|
* | |
|
|
* \->+--------+ +--------+ MHE[iobj] |
|
|
* | | | | |
|
|
* | | /->| | +--------+ |
|
|
* | | / | | |hobj |---/
|
|
* |pmdc |--/ |pmhe |-->|idc/iobj|
|
|
* +--------+ | | +--------+
|
|
* +--------+
|
|
*
|
|
*
|
|
*
|
|
\**************************************************************************/
|
|
|
|
PMETALINK16 pmetalink16Resize(HANDLE h,int cObj);
|
|
|
|
#define pmetalink16Get(h) ((PMETALINK16) plinkGet(h))
|
|
#define pmetalink16Create(h) ((PMETALINK16)plinkCreate(h,sizeof(METALINK16)))
|
|
#define bDeleteMetalink16(h) bDeleteLink(h)
|
|
|