libUEMF
A portable library for reading and writing WMF, EMF and EMF+ files
|
Structures, definitions, and function prototypes for WMF files. More...
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "uemf.h"
#include "uemf_utf.h"
#include "uwmf_endian.h"
Go to the source code of this file.
Macros | |
#define | U_WMR_MIN 0 |
Minimum U_WMR_ value. | |
#define | U_WMR_MAX 255 |
Maximum U_WMR_ value. | |
#define | U_WMR_MASK 0xFF |
Mask for enumerator (lower) byte. | |
#define | U_WMR_INVALID 0xFFFFFFFF |
Indicates "Not a valid U_WMR_* value". | |
#define | BI_BITCOUNT_0 U_BCBM_EXPLICIT |
Derived from JPG or PNG compressed image or ? | |
#define | BI_BITCOUNT_1 U_BCBM_MONOCHROME |
2 colors. bmiColors array has two entries | |
#define | BI_BITCOUNT_2 U_BCBM_COLOR4 |
2^4 colors. bmiColors array has 16 entries | |
#define | BI_BITCOUNT_3 U_BCBM_COLOR8 |
2^8 colors. bmiColors array has 256 entries | |
#define | BI_BITCOUNT_4 U_BCBM_COLOR16 |
2^16 colors. bmiColors is not used. Pixels are 5 bits B,G,R with 1 unused bit | |
#define | BI_BITCOUNT_5 U_BCBM_COLOR24 |
2^24 colors. bmiColors is not used. Pixels are U_RGBTRIPLE. | |
#define | BI_BITCOUNT_6 U_BCBM_COLOR32 |
2^32 colors. bmiColors is not used. Pixels are U_RGBQUAD. | |
#define | U_DIB_PAL_INDICES 2 |
No color table, pixels are logical palette indices. | |
#define | U_BI_CMYK 0x000B |
CMYK uncompressed. | |
#define | U_BI_CMYKRLE8 0x000C |
CMYK RLE8 compression. | |
#define | U_BI_CMYKRLE4 = 0x000D |
CMYK RLE4 compression. | |
#define | U_MFE_NEWFRAME 0x0001 |
NEWFRAME escape type. | |
#define | U_MFE_ABORTDOC 0x0002 |
ABORTDOC escape type. | |
#define | U_MFE_NEXTBAND 0x0003 |
NEXTBAND escape type. | |
#define | U_MFE_SETCOLORTABLE 0x0004 |
SETCOLORTABLE escape type. | |
#define | U_MFE_GETCOLORTABLE 0x0005 |
GETCOLORTABLE escape type. | |
#define | U_MFE_FLUSHOUT 0x0006 |
FLUSHOUT escape type. | |
#define | U_MFE_DRAFTMODE 0x0007 |
DRAFTMODE escape type. | |
#define | U_MFE_QUERYESCSUPPORT 0x0008 |
QUERYESCSUPPORT escape type. | |
#define | U_MFE_SETABORTPROC 0x0009 |
SETABORTPROC escape type. | |
#define | U_MFE_STARTDOC 0x000A |
STARTDOC escape type. | |
#define | U_MFE_ENDDOC 0x000B |
ENDDOC escape type. | |
#define | U_MFE_GETPHYSPAGESIZE 0x000C |
GETPHYSPAGESIZE escape type. | |
#define | U_MFE_GETPRINTINGOFFSET 0x000D |
GETPRINTINGOFFSET escape type. | |
#define | U_MFE_GETSCALINGFACTOR 0x000E |
GETSCALINGFACTOR escape type. | |
#define | U_MFE_META_ESCAPE_ENHANCED_METAFILE 0x000F |
META_ESCAPE_ENHANCED_METAFILE escape type. | |
#define | U_MFE_SETPENWIDTH 0x0010 |
SETPENWIDTH escape type. | |
#define | U_MFE_SETCOPYCOUNT 0x0011 |
SETCOPYCOUNT escape type. | |
#define | U_MFE_SETPAPERSOURCE 0x0012 |
SETPAPERSOURCE escape type. | |
#define | U_MFE_PASSTHROUGH 0x0013 |
PASSTHROUGH escape type. | |
#define | U_MFE_GETTECHNOLOGY 0x0014 |
GETTECHNOLOGY escape type. | |
#define | U_MFE_SETLINECAP 0x0015 |
SETLINECAP escape type. | |
#define | U_MFE_SETLINEJOIN 0x0016 |
SETLINEJOIN escape type. | |
#define | U_MFE_SETMITERLIMIT 0x0017 |
SETMITERLIMIT escape type. | |
#define | U_MFE_BANDINFO 0x0018 |
BANDINFO escape type. | |
#define | U_MFE_DRAWPATTERNRECT 0x0019 |
DRAWPATTERNRECT escape type. | |
#define | U_MFE_GETVECTORPENSIZE 0x001A |
GETVECTORPENSIZE escape type. | |
#define | U_MFE_GETVECTORBRUSHSIZE 0x001B |
GETVECTORBRUSHSIZE escape type. | |
#define | U_MFE_ENABLEDUPLEX 0x001C |
ENABLEDUPLEX escape type. | |
#define | U_MFE_GETSETPAPERBINS 0x001D |
GETSETPAPERBINS escape type. | |
#define | U_MFE_GETSETPRINTORIENT 0x001E |
GETSETPRINTORIENT escape type. | |
#define | U_MFE_ENUMPAPERBINS 0x001F |
ENUMPAPERBINS escape type. | |
#define | U_MFE_SETDIBSCALING 0x0020 |
SETDIBSCALING escape type. | |
#define | U_MFE_EPSPRINTING 0x0021 |
EPSPRINTING escape type. | |
#define | U_MFE_ENUMPAPERMETRICS 0x0022 |
ENUMPAPERMETRICS escape type. | |
#define | U_MFE_GETSETPAPERMETRICS 0x0023 |
GETSETPAPERMETRICS escape type. | |
#define | U_MFE_POSTSCRIPT_DATA 0x0025 |
POSTSCRIPT_DATA escape type. | |
#define | U_MFE_POSTSCRIPT_IGNORE 0x0026 |
POSTSCRIPT_IGNORE escape type. | |
#define | U_MFE_GETDEVICEUNITS 0x002A |
GETDEVICEUNITS escape type. | |
#define | U_MFE_GETEXTENDEDTEXTMETRICS 0x0100 |
GETEXTENDEDTEXTMETRICS escape type. | |
#define | U_MFE_GETPAIRKERNTABLE 0x0102 |
GETPAIRKERNTABLE escape type. | |
#define | U_MFE_EXTTEXTOUT 0x0200 |
EXTTEXTOUT escape type. | |
#define | U_MFE_GETFACENAME 0x0201 |
GETFACENAME escape type. | |
#define | U_MFE_DOWNLOADFACE 0x0202 |
DOWNLOADFACE escape type. | |
#define | U_MFE_METAFILE_DRIVER 0x0801 |
METAFILE_DRIVER escape type. | |
#define | U_MFE_QUERYDIBSUPPORT 0x0C01 |
QUERYDIBSUPPORT escape type. | |
#define | U_MFE_BEGIN_PATH 0x1000 |
BEGIN_PATH escape type. | |
#define | U_MFE_CLIP_TO_PATH 0x1001 |
CLIP_TO_PATH escape type. | |
#define | U_MFE_END_PATH 0x1002 |
END_PATH escape type. | |
#define | U_MFE_OPEN_CHANNEL 0x100E |
OPEN_CHANNEL escape type. | |
#define | U_MFE_DOWNLOADHEADER 0x100F |
DOWNLOADHEADER escape type. | |
#define | U_MFE_CLOSE_CHANNEL 0x1010 |
CLOSE_CHANNEL escape type. | |
#define | U_MFE_POSTSCRIPT_PASSTHROUGH 0x1013 |
POSTSCRIPT_PASSTHROUGH escape type. | |
#define | U_MFE_ENCAPSULATED_POSTSCRIPT 0x1014 |
ENCAPSULATED_POSTSCRIPT escape type. | |
#define | U_MFE_POSTSCRIPT_IDENTIFY 0x1015 |
POSTSCRIPT_IDENTIFY escape type. | |
#define | U_MFE_POSTSCRIPT_INJECTION 0x1016 |
POSTSCRIPT_INJECTION escape type. | |
#define | U_MFE_CHECKJPEGFORMAT 0x1017 |
CHECKJPEGFORMAT escape type. | |
#define | U_MFE_CHECKPNGFORMAT 0x1018 |
CHECKPNGFORMAT escape type. | |
#define | U_MFE_GET_PS_FEATURESETTING 0x1019 |
GET_PS_FEATURESETTING escape type. | |
#define | U_MFE_MXDC_ESCAPE 0x101A |
MXDC_ESCAPE escape type. | |
#define | U_MFE_SPCLPASSTHROUGH2 0x11D8 |
SPCLPASSTHROUGH2 escape type. | |
#define | U_SIZE_PAIRF 8 |
#define | U_SIZE_COLORREF 4 |
#define | U_SIZE_BRUSH 8 |
#define | U_SIZE_FONT 19 |
#define | U_SIZE_FONT_CORE 18 |
#define | U_SIZE_PLTNTRY 4 |
#define | U_SIZE_PALETTE 8 |
#define | U_SIZE_PEN 10 |
#define | U_SIZE_POINT16 4 |
#define | U_SIZE_RECT16 8 |
#define | U_SIZE_REGION 20 |
#define | U_SIZE_BITMAP16 10 |
#define | U_SIZE_BITMAPCOREHEADER 12 |
#define | U_SIZE_BITMAPINFOHEADER 40 |
#define | U_SIZE_BITMAPV4HEADER 108 |
#define | U_SIZE_BITMAPV5HEADER 124 |
#define | U_SIZE_WLOGBRUSH 8 |
#define | U_SIZE_POLYPOLYGON 4 |
#define | U_SIZE_SCAN 8 |
#define | U_SIZE_METARECORD 6 |
#define | U_SIZE_WMRPLACEABLE 22 |
#define | U_SIZE_WMRHEADER 18 |
#define | U_SIZE_WMREOF 6 |
#define | U_SIZE_WMRSETRELABS 6 |
#define | U_SIZE_WMRSAVEDC 6 |
#define | U_SIZE_WMRRESTOREDC 8 |
#define | U_SIZE_WMRREALIZEPALETTE 6 |
#define | U_SIZE_WMRSETBKCOLOR 10 |
#define | U_SIZE_WMRSETTEXTCOLOR 10 |
#define | U_SIZE_WMRSETBKMODE 8 |
#define | U_SIZE_WMRSETROP2 8 |
#define | U_SIZE_WMRSETPOLYFILLMODE 8 |
#define | U_SIZE_WMRSETSTRETCHBLTMODE 8 |
#define | U_SIZE_WMRSETTEXTALIGN 8 |
#define | U_SIZE_WMRSETMAPMODE 8 |
#define | U_SIZE_WMRSETTEXTCHAREXTRA 8 |
#define | U_SIZE_WMRSETTEXTJUSTIFICATION 10 |
#define | U_SIZE_WMRSETWINDOWORG 10 |
#define | U_SIZE_WMRSETWINDOWEXT 10 |
#define | U_SIZE_WMRSETVIEWPORTORG 10 |
#define | U_SIZE_WMRSETVIEWPORTEXT 10 |
#define | U_SIZE_WMROFFSETWINDOWORG 10 |
#define | U_SIZE_WMROFFSETVIEWPORTORG 10 |
#define | U_SIZE_WMRLINETO 10 |
#define | U_SIZE_WMRMOVETO 10 |
#define | U_SIZE_WMROFFSETCLIPRGN 10 |
#define | U_SIZE_WMRSCALEWINDOWEXT 14 |
#define | U_SIZE_WMRSCALEVIEWPORTEXT 14 |
#define | U_SIZE_WMREXCLUDECLIPRECT 14 |
#define | U_SIZE_WMRINTERSECTCLIPRECT 14 |
#define | U_SIZE_WMRARC 22 |
#define | U_SIZE_WMRELLIPSE 14 |
#define | U_SIZE_WMRRECTANGLE 14 |
#define | U_SIZE_WMRFLOODFILL 16 |
#define | U_SIZE_WMREXTFLOODFILL 16 |
#define | U_SIZE_WMRSETPIXEL 14 |
#define | U_SIZE_WMRPIE 22 |
#define | U_SIZE_WMRCHORD 22 |
#define | U_SIZE_WMRROUNDRECT 18 |
#define | U_SIZE_WMRPATBLT 18 |
#define | U_SIZE_WMRTEXTOUT 8 |
#define | U_SIZE_WMRBITBLT_NOPX 24 |
#define | U_SIZE_WMRBITBLT_PX 22 |
#define | U_SIZE_WMRSTRETCHBLT_NOPX 28 |
#define | U_SIZE_WMRSTRETCHBLT_PX 26 |
#define | U_SIZE_WMRPOLYGON 10 |
#define | U_SIZE_WMRPOLYLINE 10 |
#define | U_SIZE_WMRESCAPE 10 |
#define | U_SIZE_WMRFILLREGION 10 |
#define | U_SIZE_WMRFRAMEREGION 14 |
#define | U_SIZE_WMRINVERTREGION 8 |
#define | U_SIZE_WMRPAINTREGION 8 |
#define | U_SIZE_WMRSELECTCLIPREGION 8 |
#define | U_SIZE_WMRSELECTOBJECT 8 |
#define | U_SIZE_WMRSELECTPALETTE 8 |
#define | U_SIZE_WMRRESIZEPALETTE 8 |
#define | U_SIZE_WMRDELETEOBJECT 8 |
#define | U_SIZE_WMRDRAWTEXT 6 |
#define | U_SIZE_WMRCREATEBITMAPINDIRECT 6 |
#define | U_SIZE_WMRCREATEBITMAP 6 |
#define | U_SIZE_WMRSETMAPPERFLAGS 10 |
#define | U_SIZE_WMREXTTEXTOUT 14 |
#define | U_SIZE_WMRSETDIBTODEV 22 |
#define | U_SIZE_WMRANIMATEPALETTE 14 |
#define | U_SIZE_WMRSETPALENTRIES 14 |
#define | U_SIZE_WMRCREATEPALETTE 14 |
#define | U_SIZE_WMRPOLYPOLYGON 10 |
#define | U_SIZE_WMRDIBBITBLT_NOPX 24 |
#define | U_SIZE_WMRDIBBITBLT_PX 22 |
#define | U_SIZE_WMRDIBSTRETCHBLT_NOPX 28 |
#define | U_SIZE_WMRDIBSTRETCHBLT_PX 26 |
#define | U_SIZE_WMRDIBCREATEPATTERNBRUSH 10 |
#define | U_SIZE_WMRSTRETCHDIB 28 |
#define | U_SIZE_WMRCREATEPATTERNBRUSH 6 |
#define | U_SIZE_WMRCREATEPENINDIRECT 16 |
#define | U_SIZE_WMRCREATEFONTINDIRECT 26 |
#define | U_SIZE_WMRCREATEBRUSHINDIRECT 14 |
#define | U_SIZE_WMRCREATEREGION 26 |
#define | U_TEST_NOPX2(A, B) (A == (uint32_t) (B + 3)) |
A is Size16_4 (extracted and aligned), B = xb true if no bitmap associated with the structure, used with some BLT records. | |
#define | U_TEST_NOPXB(A, B) (A/2 == (uint32_t) (B + 3)) |
A is Size16_4 (extracted and aligned)*2, B = xb, true if no bitmap associated with the structure, used with some BLT records. | |
#define | U_WMRTYPE(A) (((U_METARECORD *)A)->iType) |
Get iType from U_WMR* record. | |
#define | U_WMRXB(A) (((U_METARECORD *)A)->xb) |
Get xb from U_WMR* record. | |
#define | U_WMR_XB_FROM_TYPE(A) ((uint8_t) (U_wmr_values(A)>>8)) |
Get xb from type value. | |
#define | U_U16(A) (*(uint16_t *)&A) |
interpret a 16 bit type as uint16_t. | |
#define | U_P16(A) ( (uint16_t *)&A) |
pass any 16 bit type as a pointer to a uint16_t. | |
#define | U_PP16(A) ( (uint16_t *) A) |
pass any pointer to a 16 bit type as a pointer to a uint16_t. | |
#define | U_RCL16_DEF (U_RECT16){0,0,-1,-1} |
Use this when no bounds are needed. | |
#define | U_LCS_sRGB 0x73524742 |
ASCII for "sRGB". More... | |
#define | U_LCS_WINDOWS_COLOR_SPACE 0x57696E20 |
ASCII for "Win ". | |
#define | U_MEMORYMETAFILE 0x0001 |
memory metafile (never used by libUWMF) More... | |
#define | U_DISKMETAFILE 0x0002 |
disk metafile (always used by libUWMF) | |
#define | U_METAVERSION100 0x0100 |
DIBs not allowed. More... | |
#define | U_METAVERSION300 0x0300 |
DIBs allowed. | |
#define | U_PC_RESERVED 0x01 |
used for animation More... | |
#define | U_PC_EXPLICIT 0x02 |
low order word is palette index | |
#define | U_PC_NOCOLLAPSE 0x04 |
store as new color in palette, do not match to existing color | |
#define | U_WPS_CAP_NOTSET -2 |
#define | U_WPS_CAP_FLAT 0 |
#define | U_WPS_CAP_ROUND 1 |
#define | U_WPS_CAP_SQUARE 2 |
#define | U_WPS_JOIN_NOTSET -2 |
#define | U_WPS_JOIN_MITER 0 |
#define | U_WPS_JOIN_ROUND 1 |
#define | U_WPS_JOIN_BEVEL 2 |
Typedefs | |
typedef struct U_WMREOF | U_WMRSETRELABS |
WMF manual 2.3.5.21. | |
typedef struct U_WMREOF | U_WMRSAVEDC |
WMF manual 2.3.5.11. | |
typedef struct U_WMREOF | U_WMRREALIZEPALETTE |
WMF manual 2.3.5.8. | |
typedef struct U_WMRSETBKCOLOR | U_WMRSETTEXTCOLOR |
WMF manual 2.3.5.26. | |
typedef struct U_WMRSETBKMODE | U_WMRSETPOLYFILLMODE |
WMF manual 2.3.5.20 Mode = PolyFillMode Enumeration. | |
typedef struct U_WMRSETBKMODE | U_WMRSETROP2 |
WMF manual 2.3.5.22 Binary Raster Operation Enumeration. | |
typedef struct U_WMRSETBKMODE | U_WMRSETSTRETCHBLTMODE |
WMF manual 2.3.5.23 Mode = StretchMode Enumeration. | |
typedef struct U_WMRSETBKMODE | U_WMRSETTEXTALIGN |
WMF manual 2.3.5.24 Mode = TextAlignment Enumeration. | |
typedef struct U_WMRSETMAPMODE | U_WMRSETTEXTCHAREXTRA |
WMF manual 2.3.5.25, Mode = Extra space in logical units to add to each character. | |
typedef struct U_WMRSETWINDOWORG | U_WMRSETWINDOWEXT |
WMF manual 2.3.5.30, Window X,Y extent. | |
typedef struct U_WMRSETWINDOWORG | U_WMRSETVIEWPORTORG |
WMF manual 2.3.5.29, Viewport X,Y origin. | |
typedef struct U_WMRSETWINDOWORG | U_WMRSETVIEWPORTEXT |
WMF manual 2.3.5.28, Viewport X,Y extent. | |
typedef struct U_WMRSETWINDOWORG | U_WMROFFSETWINDOWORG |
WMF manual 2.3.5.7, Window X,Y offset in device units. | |
typedef struct U_WMRSETWINDOWORG | U_WMROFFSETVIEWPORTORG |
WMF manual 2.3.5.6, Viewport X,Y offset in device units. | |
typedef struct U_WMRSETWINDOWORG | U_WMRLINETO |
WMF manual 2.3.3.10, Endpoint X,Y in logical units. | |
typedef struct U_WMRSETWINDOWORG | U_WMRMOVETO |
WMF manual 2.3.3.4, Destination X,Y in logical units. | |
typedef struct U_WMRSETWINDOWORG | U_WMROFFSETCLIPRGN |
WMF manual 2.3.5.5, Y offset in logical units. | |
typedef struct U_WMRSCALEWINDOWEXT | U_WMRSCALEVIEWPORTEXT |
WMF manual 2.3.5.12. | |
typedef struct U_WMREXCLUDECLIPRECT | U_WMRINTERSECTCLIPRECT |
WMF manual 2.3.5.3. | |
typedef struct U_WMRELLIPSE | U_WMRRECTANGLE |
WMF manual 2.3.3.17. | |
typedef struct U_WMRFLOODFILL | U_WMREXTFLOODFILL |
WMF manual 2.3.3.7. | |
typedef struct U_WMRPIE | U_WMRCHORD |
WMF manual 2.3.3.2. | |
typedef struct U_WMRPOLYGON | U_WMRPOLYLINE |
WMF manual 2.3.3.14. | |
typedef struct U_WMRINVERTREGION | U_WMRPAINTREGION |
WMF manual 2.3.3.11, paint region. | |
typedef struct U_WMRINVERTREGION | U_WMRSELECTCLIPREGION |
WMF manual 2.3.4.9, select as clip region. | |
typedef struct U_WMRINVERTREGION | U_WMRSELECTOBJECT |
WMF manual 2.3.4.10, select object. | |
typedef struct U_WMRINVERTREGION | U_WMRSELECTPALETTE |
WMF manual 2.3.4.11, select palette object. | |
typedef struct U_WMRINVERTREGION | U_WMRRESIZEPALETTE |
WMF manual 2.3.5.9, resize the system palette to "index". | |
typedef struct U_WMRINVERTREGION | U_WMRDELETEOBJECT |
WMF manual 2.3.4.7, delete object. | |
typedef struct U_WMRDRAWTEXT | U_WMRCREATEBITMAPINDIRECT |
in GDI and Wine, not documented in WMF manual. | |
typedef struct U_WMRDRAWTEXT | U_WMRCREATEBITMAP |
in GDI and Wine, not documented in WMF manual. | |
typedef struct U_WMRANIMATEPALETTE | U_WMRSETPALENTRIES |
WMF manual 2.3.5.19. | |
typedef struct U_WMRANIMATEPALETTE | U_WMRCREATEPALETTE |
WMF manual 2.3.4.3. | |
Structures, definitions, and function prototypes for WMF files.
WMF file Record structure information has been derived from Mingw and Wine header files, and from Microsoft's WMF Information pdf, release date July 5,2012, link from here:
http://msdn2.microsoft.com/en-us/library/cc250370.aspx
If the direct link fails the document may be found by searching for: "[MS-WMF]: Windows Metafile Format"
IMPORTANT!!! **********************************************
WMF is a 16 bit file type that has some 32 bit integers embedded in it. In a few cases these 32 bit fields are not aligned in the structures defined in uwmf.h, but in most cases they are. So when creating the individual WMF records the functions in uwmf.c can usually use a regular assignment operation for the 32 bit fields. However, once the records are part of a WMF file in memory there is no guaranty that any 32 bit type will be correctly aligned. Similarly, many WMF structures contain embedded other structures which would "naturally" be passed by pointer, but since their alignment may not be what malloc() would have created for that type, the outcome of that operation is not defined by the C standard. (Per Eric Sosman, section 6.3.2.3p7 of the standard.)
For this reason, the _print, _swap and any read operations must pass structures with unknown alignment as a (char *), and pull out the data using memcpy() or some equivalent that will not segfault when it tries to read a 32 bit value that is not aligned on a 4 byte boundary. Failure to do so will result in nonportable code. You have been warned!
Problem areas: The Size16_4 field of all WMF records may NOT be assumed to 4 byte aligned. DIB's U_BITMAPINFOHEADER 32 bit fields may not be aligned. IMPORTANT!!! **********************************************
#define U_LCS_sRGB 0x73524742 |
ASCII for "sRGB".
LogicalColorSpace Enumeration WMF manual 2.1.1.14 Not used presently, applies in BitmapV4Header
#define U_MEMORYMETAFILE 0x0001 |
memory metafile (never used by libUWMF)
MetafileType Enumeration WMF manual 2.1.1.18
#define U_METAVERSION100 0x0100 |
DIBs not allowed.
MetafileVersion Enumeration WMF manual 2.1.1.19
#define U_PC_RESERVED 0x01 |
used for animation
PaletteEntryFlag Enumeration WMF manual 2.1.1.22
#define U_WPS_CAP_NOTSET -2 |
PenStyle Enumeration WMF manual 2.1.1.23 Same as "EMF PenStyle Enumeration" in uemf.h, EXCEPT no values >0xFFFF are used, in particular there is no U_PS_GEOMETRIC (ie, all are U_PS_COSMETIC). Apparently because there is no U_PS_GEOMETRIC, U_PS_JOIN* and U_PS_ENDCAP* are also ignored by XP SP3 Preview (which defaults to a rounded cap) and PowerPoint 2003 (which defaults to square cap). The behavior was the same when escape records for JOIN and ENDCAP are used. Bottom line, WMF line formatting seems to be very hit and miss from application to application. PostScriptCap Enumeration WMF manual 2.1.1.26 These are used in Escape Cap
#define U_WPS_JOIN_NOTSET -2 |
PostScrioptJoin Enumeration WMF manual 2.1.1.29
These are used in Escape Cap
enum U_WMR_TYPES |
WMR Record types.
WMF manual 2.1.1.1
Enumerator | |
---|---|
U_WMR_EOF |
0x0000 U_WMREOF record |
U_WMR_SETBKCOLOR |
0x0201 U_WMRSETBKCOLOR record |
U_WMR_SETBKMODE |
0x0102 U_WMRSETBKMODE record |
U_WMR_SETMAPMODE |
0x0103 U_WMRSETMAPMODE record |
U_WMR_SETROP2 |
0x0104 U_WMRSETROP2 record |
U_WMR_SETRELABS |
0x0105 U_WMRSETRELABS record |
U_WMR_SETPOLYFILLMODE |
0x0106 U_WMRSETPOLYFILLMODE record |
U_WMR_SETSTRETCHBLTMODE |
0x0107 U_WMRSETSTRETCHBLTMODE record |
U_WMR_SETTEXTCHAREXTRA |
0x0108 U_WMRSETTEXTCHAREXTRA record |
U_WMR_SETTEXTCOLOR |
0x0209 U_WMRSETTEXTCOLOR record |
U_WMR_SETTEXTJUSTIFICATION |
0x020A U_WMRSETTEXTJUSTIFICATION record |
U_WMR_SETWINDOWORG |
0x020B U_WMRSETWINDOWORG record |
U_WMR_SETWINDOWEXT |
0x020C U_WMRSETWINDOWEXT record |
U_WMR_SETVIEWPORTORG |
0x020D U_WMRSETVIEWPORTORG record |
U_WMR_SETVIEWPORTEXT |
0x020E U_WMRSETVIEWPORTEXT record |
U_WMR_OFFSETWINDOWORG |
0x020F U_WMROFFSETWINDOWORG record |
U_WMR_SCALEWINDOWEXT |
0x0410 U_WMRSCALEWINDOWEXT record |
U_WMR_OFFSETVIEWPORTORG |
0x0211 U_WMROFFSETVIEWPORTORG record |
U_WMR_SCALEVIEWPORTEXT |
0x0412 U_WMRSCALEVIEWPORTEXT record |
U_WMR_LINETO |
0x0213 U_WMRLINETO record |
U_WMR_MOVETO |
0x0214 U_WMRMOVETO record |
U_WMR_EXCLUDECLIPRECT |
0x0415 U_WMREXCLUDECLIPRECT record |
U_WMR_INTERSECTCLIPRECT |
0x0416 U_WMRINTERSECTCLIPRECT record |
U_WMR_ARC |
0x0817 U_WMRARC record |
U_WMR_ELLIPSE |
0x0418 U_WMRELLIPSE record |
U_WMR_FLOODFILL |
0x0419 U_WMRFLOODFILL record |
U_WMR_PIE |
0x081A U_WMRPIE record |
U_WMR_RECTANGLE |
0x041B U_WMRRECTANGLE record |
U_WMR_ROUNDRECT |
0x061C U_WMRROUNDRECT record |
U_WMR_PATBLT |
0x061D U_WMRPATBLT record |
U_WMR_SAVEDC |
0x001E U_WMRSAVEDC record |
U_WMR_SETPIXEL |
0x041F U_WMRSETPIXEL record |
U_WMR_OFFSETCLIPRGN |
0x0220 U_WMROFFSETCLIPRGN record |
U_WMR_TEXTOUT |
0x0521 U_WMRTEXTOUT record |
U_WMR_BITBLT |
0x0922 U_WMRBITBLT record |
U_WMR_STRETCHBLT |
0x0B23 U_WMRSTRETCHBLT record |
U_WMR_POLYGON |
0x0324 U_WMRPOLYGON record |
U_WMR_POLYLINE |
0x0325 U_WMRPOLYLINE record |
U_WMR_ESCAPE |
0x0626 U_WMRESCAPE record |
U_WMR_RESTOREDC |
0x0127 U_WMRRESTOREDC record |
U_WMR_FILLREGION |
0x0228 U_WMRFILLREGION record |
U_WMR_FRAMEREGION |
0x0429 U_WMRFRAMEREGION record |
U_WMR_INVERTREGION |
0x012A U_WMRINVERTREGION record |
U_WMR_PAINTREGION |
0x012B U_WMRPAINTREGION record |
U_WMR_SELECTCLIPREGION |
0x012C U_WMRSELECTCLIPREGION record |
U_WMR_SELECTOBJECT |
0x012D U_WMRSELECTOBJECT record |
U_WMR_SETTEXTALIGN |
0x012E U_WMRSETTEXTALIGN record |
U_WMR_DRAWTEXT |
0x062F U_WMRDRAWTEXT record |
U_WMR_CHORD |
0x0830 U_WMRCHORD record |
U_WMR_SETMAPPERFLAGS |
0x0231 U_WMRSETMAPPERFLAGS record |
U_WMR_EXTTEXTOUT |
0x0A32 U_WMREXTTEXTOUT record |
U_WMR_SETDIBTODEV |
0x0D33 U_WMRSETDIBTODEV record |
U_WMR_SELECTPALETTE |
0x0234 U_WMRSELECTPALETTE record |
U_WMR_REALIZEPALETTE |
0x0035 U_WMRREALIZEPALETTE record |
U_WMR_ANIMATEPALETTE |
0x0436 U_WMRANIMATEPALETTE record |
U_WMR_SETPALENTRIES |
0x0037 U_WMRSETPALENTRIES record |
U_WMR_POLYPOLYGON |
0x0538 U_WMRPOLYPOLYGON record |
U_WMR_RESIZEPALETTE |
0x0139 U_WMRRESIZEPALETTE record |
U_WMR_3A |
0x003A U_WMR3A record |
U_WMR_3B |
0x003B U_WMR3B record |
U_WMR_3C |
0x003C U_WMR3C record |
U_WMR_3D |
0x003D U_WMR3D record |
U_WMR_3E |
0x003E U_WMR3E record |
U_WMR_3F |
0x003F U_WMR3F record |
U_WMR_DIBBITBLT |
0x0940 U_WMRDIBBITBLT record |
U_WMR_DIBSTRETCHBLT |
0x0B41 U_WMRDIBSTRETCHBLT record |
U_WMR_DIBCREATEPATTERNBRUSH |
0x0142 U_WMRDIBCREATEPATTERNBRUSH record |
U_WMR_STRETCHDIB |
0x0F43 U_WMRSTRETCHDIB record |
U_WMR_44 |
0x0044 U_WMR44 record |
U_WMR_45 |
0x0045 U_WMR45 record |
U_WMR_46 |
0x0046 U_WMR46 record |
U_WMR_47 |
0x0047 U_WMR47 record |
U_WMR_EXTFLOODFILL |
0x0548 U_WMREXTFLOODFILL record |
U_WMR_49 |
0x0049 U_WMR49 record |
U_WMR_4A |
0x004A U_WMR4A record |
U_WMR_4B |
0x004B U_WMR4B record |
U_WMR_4C |
0x014C U_WMR4C record |
U_WMR_4D |
0x014D U_WMR4D record |
U_WMR_4E |
0x004E U_WMR4E record |
U_WMR_4F |
0x004F U_WMR4F record |
U_WMR_50 |
0x0050 U_WMR50 record |
U_WMR_51 |
0x0051 U_WMR51 record |
U_WMR_52 |
0x0052 U_WMR52 record |
U_WMR_53 |
0x0053 U_WMR53 record |
U_WMR_54 |
0x0054 U_WMR54 record |
U_WMR_55 |
0x0055 U_WMR55 record |
U_WMR_56 |
0x0056 U_WMR56 record |
U_WMR_57 |
0x0057 U_WMR57 record |
U_WMR_58 |
0x0058 U_WMR58 record |
U_WMR_59 |
0x0059 U_WMR59 record |
U_WMR_5A |
0x005A U_WMR5A record |
U_WMR_5B |
0x005B U_WMR5B record |
U_WMR_5C |
0x005C U_WMR5C record |
U_WMR_5D |
0x005D U_WMR5D record |
U_WMR_5E |
0x005E U_WMR5E record |
U_WMR_5F |
0x005F U_WMR5F record |
U_WMR_60 |
0x0060 U_WMR60 record |
U_WMR_61 |
0x0061 U_WMR61 record |
U_WMR_62 |
0x0062 U_WMR62 record |
U_WMR_63 |
0x0063 U_WMR63 record |
U_WMR_64 |
0x0064 U_WMR64 record |
U_WMR_65 |
0x0065 U_WMR65 record |
U_WMR_66 |
0x0066 U_WMR66 record |
U_WMR_67 |
0x0067 U_WMR67 record |
U_WMR_68 |
0x0068 U_WMR68 record |
U_WMR_69 |
0x0069 U_WMR69 record |
U_WMR_6A |
0x006A U_WMR6A record |
U_WMR_6B |
0x006B U_WMR6B record |
U_WMR_6C |
0x006C U_WMR6C record |
U_WMR_6D |
0x006D U_WMR6D record |
U_WMR_6E |
0x006E U_WMR6E record |
U_WMR_6F |
0x006F U_WMR6F record |
U_WMR_70 |
0x0070 U_WMR70 record |
U_WMR_71 |
0x0071 U_WMR71 record |
U_WMR_72 |
0x0072 U_WMR72 record |
U_WMR_73 |
0x0073 U_WMR73 record |
U_WMR_74 |
0x0074 U_WMR74 record |
U_WMR_75 |
0x0075 U_WMR75 record |
U_WMR_76 |
0x0076 U_WMR76 record |
U_WMR_77 |
0x0077 U_WMR77 record |
U_WMR_78 |
0x0078 U_WMR78 record |
U_WMR_79 |
0x0079 U_WMR79 record |
U_WMR_7A |
0x007A U_WMR7A record |
U_WMR_7B |
0x007B U_WMR7B record |
U_WMR_7C |
0x007C U_WMR7C record |
U_WMR_7D |
0x007D U_WMR7D record |
U_WMR_7E |
0x007E U_WMR7E record |
U_WMR_7F |
0x007F U_WMR7F record |
U_WMR_80 |
0x0080 U_WMR80 record |
U_WMR_81 |
0x0081 U_WMR81 record |
U_WMR_82 |
0x0082 U_WMR82 record |
U_WMR_83 |
0x0083 U_WMR83 record |
U_WMR_84 |
0x0084 U_WMR84 record |
U_WMR_85 |
0x0085 U_WMR85 record |
U_WMR_86 |
0x0086 U_WMR86 record |
U_WMR_87 |
0x0087 U_WMR87 record |
U_WMR_88 |
0x0088 U_WMR88 record |
U_WMR_89 |
0x0089 U_WMR89 record |
U_WMR_8A |
0x008A U_WMR8A record |
U_WMR_8B |
0x008B U_WMR8B record |
U_WMR_8C |
0x008C U_WMR8C record |
U_WMR_8D |
0x008D U_WMR8D record |
U_WMR_8E |
0x008E U_WMR8E record |
U_WMR_8F |
0x008F U_WMR8F record |
U_WMR_90 |
0x0090 U_WMR90 record |
U_WMR_91 |
0x0091 U_WMR91 record |
U_WMR_92 |
0x0092 U_WMR92 record |
U_WMR_93 |
0x0093 U_WMR93 record |
U_WMR_94 |
0x0094 U_WMR94 record |
U_WMR_95 |
0x0095 U_WMR95 record |
U_WMR_96 |
0x0096 U_WMR96 record |
U_WMR_97 |
0x0097 U_WMR97 record |
U_WMR_98 |
0x0098 U_WMR98 record |
U_WMR_99 |
0x0099 U_WMR99 record |
U_WMR_9A |
0x009A U_WMR9A record |
U_WMR_9B |
0x009B U_WMR9B record |
U_WMR_9C |
0x009C U_WMR9C record |
U_WMR_9D |
0x009D U_WMR9D record |
U_WMR_9E |
0x009E U_WMR9E record |
U_WMR_9F |
0x009F U_WMR9F record |
U_WMR_A0 |
0x00A0 U_WMRA0 record |
U_WMR_A1 |
0x00A1 U_WMRA1 record |
U_WMR_A2 |
0x00A2 U_WMRA2 record |
U_WMR_A3 |
0x00A3 U_WMRA3 record |
U_WMR_A4 |
0x00A4 U_WMRA4 record |
U_WMR_A5 |
0x00A5 U_WMRA5 record |
U_WMR_A6 |
0x00A6 U_WMRA6 record |
U_WMR_A7 |
0x00A7 U_WMRA7 record |
U_WMR_A8 |
0x00A8 U_WMRA8 record |
U_WMR_A9 |
0x00A9 U_WMRA9 record |
U_WMR_AA |
0x00AA U_WMRAA record |
U_WMR_AB |
0x00AB U_WMRAB record |
U_WMR_AC |
0x00AC U_WMRAC record |
U_WMR_AD |
0x00AD U_WMRAD record |
U_WMR_AE |
0x00AE U_WMRAE record |
U_WMR_AF |
0x00AF U_WMRAF record |
U_WMR_B0 |
0x00B0 U_WMRB0 record |
U_WMR_B1 |
0x00B1 U_WMRB1 record |
U_WMR_B2 |
0x00B2 U_WMRB2 record |
U_WMR_B3 |
0x00B3 U_WMRB3 record |
U_WMR_B4 |
0x00B4 U_WMRB4 record |
U_WMR_B5 |
0x00B5 U_WMRB5 record |
U_WMR_B6 |
0x00B6 U_WMRB6 record |
U_WMR_B7 |
0x00B7 U_WMRB7 record |
U_WMR_B8 |
0x00B8 U_WMRB8 record |
U_WMR_B9 |
0x00B9 U_WMRB9 record |
U_WMR_BA |
0x00BA U_WMRBA record |
U_WMR_BB |
0x00BB U_WMRBB record |
U_WMR_BC |
0x00BC U_WMRBC record |
U_WMR_BD |
0x00BD U_WMRBD record |
U_WMR_BE |
0x00BE U_WMRBE record |
U_WMR_BF |
0x00BF U_WMRBF record |
U_WMR_C0 |
0x00C0 U_WMRC0 record |
U_WMR_C1 |
0x00C1 U_WMRC1 record |
U_WMR_C2 |
0x00C2 U_WMRC2 record |
U_WMR_C3 |
0x00C3 U_WMRC3 record |
U_WMR_C4 |
0x00C4 U_WMRC4 record |
U_WMR_C5 |
0x00C5 U_WMRC5 record |
U_WMR_C6 |
0x00C6 U_WMRC6 record |
U_WMR_C7 |
0x00C7 U_WMRC7 record |
U_WMR_C8 |
0x00C8 U_WMRC8 record |
U_WMR_C9 |
0x00C9 U_WMRC9 record |
U_WMR_CA |
0x00CA U_WMRCA record |
U_WMR_CB |
0x00CB U_WMRCB record |
U_WMR_CC |
0x00CC U_WMRCC record |
U_WMR_CD |
0x00CD U_WMRCD record |
U_WMR_CE |
0x00CE U_WMRCE record |
U_WMR_CF |
0x00CF U_WMRCF record |
U_WMR_D0 |
0x00D0 U_WMRD0 record |
U_WMR_D1 |
0x00D1 U_WMRD1 record |
U_WMR_D2 |
0x00D2 U_WMRD2 record |
U_WMR_D3 |
0x00D3 U_WMRD3 record |
U_WMR_D4 |
0x00D4 U_WMRD4 record |
U_WMR_D5 |
0x00D5 U_WMRD5 record |
U_WMR_D6 |
0x00D6 U_WMRD6 record |
U_WMR_D7 |
0x00D7 U_WMRD7 record |
U_WMR_D8 |
0x00D8 U_WMRD8 record |
U_WMR_D9 |
0x00D9 U_WMRD9 record |
U_WMR_DA |
0x00DA U_WMRDA record |
U_WMR_DB |
0x00DB U_WMRDB record |
U_WMR_DC |
0x00DC U_WMRDC record |
U_WMR_DD |
0x00DD U_WMRDD record |
U_WMR_DE |
0x00DE U_WMRDE record |
U_WMR_DF |
0x00DF U_WMRDF record |
U_WMR_E0 |
0x00E0 U_WMRE0 record |
U_WMR_E1 |
0x00E1 U_WMRE1 record |
U_WMR_E2 |
0x00E2 U_WMRE2 record |
U_WMR_E3 |
0x00E3 U_WMRE3 record |
U_WMR_E4 |
0x00E4 U_WMRE4 record |
U_WMR_E5 |
0x00E5 U_WMRE5 record |
U_WMR_E6 |
0x00E6 U_WMRE6 record |
U_WMR_E7 |
0x00E7 U_WMRE7 record |
U_WMR_E8 |
0x00E8 U_WMRE8 record |
U_WMR_E9 |
0x00E9 U_WMRE9 record |
U_WMR_EA |
0x00EA U_WMREA record |
U_WMR_EB |
0x00EB U_WMREB record |
U_WMR_EC |
0x00EC U_WMREC record |
U_WMR_ED |
0x00ED U_WMRED record |
U_WMR_EE |
0x00EE U_WMREE record |
U_WMR_EF |
0x00EF U_WMREF record |
U_WMR_DELETEOBJECT |
0x01F0 U_WMRDELETEOBJECT record |
U_WMR_F1 |
0x00F1 U_WMRF1 record |
U_WMR_F2 |
0x00F2 U_WMRF2 record |
U_WMR_F3 |
0x00F3 U_WMRF3 record |
U_WMR_F4 |
0x00F4 U_WMRF4 record |
U_WMR_F5 |
0x00F5 U_WMRF5 record |
U_WMR_F6 |
0x00F6 U_WMRF6 record |
U_WMR_CREATEPALETTE |
0x00F7 U_WMRCREATEPALETTE record |
U_WMR_F8 |
0x00F8 U_WMRF8 record |
U_WMR_CREATEPATTERNBRUSH |
0x01F9 U_WMRCREATEPATTERNBRUSH record |
U_WMR_CREATEPENINDIRECT |
0x02FA U_WMRCREATEPENINDIRECT record |
U_WMR_CREATEFONTINDIRECT |
0x02FB U_WMRCREATEFONTINDIRECT record |
U_WMR_CREATEBRUSHINDIRECT |
0x02FC U_WMRCREATEBRUSHINDIRECT record |
U_WMR_CREATEBITMAPINDIRECT |
0x02FD U_WMRCREATEBITMAPINDIRECT record |
U_WMR_CREATEBITMAP |
0x06FE U_WMRCREATEBITMAP record |
U_WMR_CREATEREGION |
0x06FF U_WMRCREATEREGION record |