#ifndef _WMF_GDI_H_ #define _WMF_GDI_H_ #include #include typedef enum { HOLLOW_BRUSH = 5 } eGdiBrush; typedef enum { PS_SOLID = 0, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME, PS_USERSTYLE, /* ... */ PS_STYLE_MASK = 0x000F, PS_ENDCAP_ROUND = (0<<8), PS_ENDCAP_SQUARE = (1<<8), PS_ENDCAP_FLAT = (2<<8), PS_ENDCAP_MASK = (0xF<<8), PS_JOIN_ROUND = (0<<12), PS_JOIN_BEVEL = (1<<12), PS_JOIN_MITER = (2<<12), PS_JOIN_MASK = (0xF<<12), PS_COSMETIC = (0<<16), PS_GEOMETRIC = (1<<16), PS_TYPE_MASK = (0xF<<16) } ePenStyle; typedef enum { BS_SOLID = 0, BS_NULL /* ... */ } eBrushStyle; typedef enum { FW_DONTCARE = 0, FW_THIN = 100, FW_EXTRALIGHT = 200, FW_ULTRALIGHT = FW_EXTRALIGHT, FW_LIGHT = 300, FW_NORMAL = 400, FW_MEDIUM = 500, FW_SEMIBOLD = 600, FW_DEMIBOLD = FW_SEMIBOLD, FW_BOLD = 700, FW_EXTRABOLD = 800, FW_ULTRABOLD = FW_EXTRABOLD, FW_HEAVY = 900 } eFontWeight; typedef enum { TA_LEFT = 0, TA_TOP = 0, TA_RIGHT = 2, TA_CENTER = 6, TA_BOTTOM = 8, TA_BASELINE = 24 } eTextAlign; typedef enum { ANSI_CHARSET = 0, DEFAULT_CHARSET = 1 } eCharSet; typedef enum { OUT_DEFAULT_PRECIS = 0, OUT_STRING_PRECIS, OUT_CHARACTER_PRECIS, OUT_STROKE_PRECIS, OUT_TT_PRECIS, OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, /* ... */ } eOutPrecision; typedef enum { CLIP_DEFAULT_PRECIS = 0 /* ... */ } eClipPrecision; typedef enum { DEFAULT_QUALITY = 0, DRAFT_QUALITY, PROOF_QUALITY } eQuality; typedef enum { DEFAULT_PITCH = 0, FIXED_PITCH, VARIABLE_PITCH } ePitch; typedef enum { NULL_PEN = 8 } eStockObject; typedef enum { TRANSPARENT = 1, OPAQUE = 2 } eBkMode; typedef enum { MM_TEXT = 1 } eMapMode; typedef enum { HORZSIZE = 4, VERTSIZE = 6, HORZRES = 8, VERTRES = 10, // some more constants not useful without a GDI printer (driver) PHYSICALWIDTH = 110, PHYSICALHEIGHT = 111, PHYSICALOFFSETX = 112, PHYSICALOFFSETY = 113 } eDeviceCaps; namespace W32 { typedef gulong COLORREF; typedef guint16 WORD; typedef guint32 DWORD; typedef gboolean BOOL; typedef guint UINT; typedef guint8 BYTE; typedef const char* LPCTSTR; typedef guint16 wmfint; typedef struct { wmfint x, y; } POINT, * LPPOINT; typedef struct { wmfint top, left, right, bottom; } RECT; typedef struct _WindowsMetaHeader { WORD FileType; /* Type of metafile (0=memory, 1=disk) */ WORD HeaderSize; /* Size of header in WORDS (always 9) */ WORD Version; /* Version of Microsoft Windows used */ DWORD FileSize; /* Total size of the metafile in WORDs */ WORD NumOfObjects; /* Number of objects in the file */ DWORD MaxRecordSize; /* The size of largest record in WORDs */ WORD NumOfParams; /* Not Used (always 0) */ } WMFHEAD; typedef enum { GDI_PEN = 1, GDI_BRUSH, GDI_FONT, GDI_STOCK } eGdiType; typedef struct { wmfint Style, Width; COLORREF Color; } GDI_Pen; typedef struct { wmfint Style; COLORREF Color; } GDI_Brush; typedef struct { wmfint lbStyle; COLORREF lbColor; DWORD lbHatch; } LOGBRUSH; typedef struct { wmfint Width, Height; wmfint Escapement, Orientation; wmfint Weight; DWORD dwItalic; DWORD dwUnderline; DWORD dwStrikeOut; DWORD dwCharSet; DWORD dwOutPrecision; DWORD dwClipPrecision; DWORD dwQuality; DWORD dwPitchAndFamily; char* sFaceName; } GDI_Font; typedef struct _GdiObject* HGDIOBJ; typedef struct { wmfint Nr; HGDIOBJ hobj; } GDI_Stock; typedef struct _GdiObject { eGdiType Type; union { GDI_Pen Pen; GDI_Brush Brush; GDI_Font Font; GDI_Stock Stock; }; } * HBRUSH, * HPEN, * HFONT; typedef struct _MetaFileDeviceContext { FILE* file; POINT actPos; HGDIOBJ hPen; HGDIOBJ hBrush; HGDIOBJ hFont; } * HDC; HDC GetDC(void* hwnd); BOOL ReleaseDC(void* hwnd, HDC); HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hobj); BOOL DeleteObject(HGDIOBJ hobj); HGDIOBJ GetStockObject(int iObj); int GetDeviceCaps(HDC, int); HBRUSH CreateSolidBrush(COLORREF color); HPEN CreatePen(wmfint iStyle, wmfint iWidth, COLORREF color); HPEN ExtCreatePen(wmfint iStyle, wmfint iWidth, LOGBRUSH*, DWORD, DWORD*); HFONT CreateFont(int iWidth, int iHeight, int iEscapement, int iOrientation, int iWeight, DWORD dwItalic, DWORD dwUnderline, DWORD dwStrikeOut, DWORD dwCharSet, DWORD dwOutPrecision, DWORD dwClipPrecision, DWORD dwQuality, DWORD dwPitchAndFamily, const char* sFaceName); HDC CreateEnhMetaFile(HDC hdcRef, const char* sName, RECT* pbox, const char* sDesc); typedef void* HENHMETAFILE; HENHMETAFILE CloseEnhMetaFile(HDC hdc); BOOL DeleteEnhMetaFile(HENHMETAFILE hemf); BOOL SetTextAlign(HDC hdc, wmfint iMode); COLORREF SetTextColor(HDC hdc, COLORREF color); BOOL MoveToEx(HDC hdc, wmfint x, wmfint y, LPPOINT ppt); BOOL LineTo(HDC hdc, wmfint x, wmfint y); BOOL Polyline(HDC hdc, LPPOINT ppts, wmfint iNum); BOOL Polygon(HDC hdc, LPPOINT ppts, wmfint iNum); BOOL Rectangle(HDC hdc, wmfint iLeft, wmfint iTop, wmfint iRight, wmfint iBottom); BOOL RoundRect(HDC hdc, wmfint iLeft, wmfint iTop, wmfint iRight, wmfint iBottom, wmfint iWidth, wmfint iHeight); BOOL Arc(HDC hdc, wmfint iLeft, wmfint iTop, wmfint iRight, wmfint iBottom, wmfint iStartX, wmfint iStartY, wmfint iEndX, wmfint iEndY); BOOL Pie(HDC, wmfint, wmfint, wmfint, wmfint, wmfint, wmfint, wmfint, wmfint); BOOL Ellipse(HDC hdc, wmfint iLeft, wmfint iTop, wmfint iRight, wmfint iBottom); BOOL PolyBezier(HDC hdc, LPPOINT ppts, int iNum); BOOL TextOut(HDC hdc, wmfint iX, wmfint iY, const char* s, wmfint iNumChars); BOOL TextOutW(HDC hdc, wmfint iX, wmfint iY, const gunichar2* s, long iNumChars); UINT GetACP(); wmfint SetBkMode(HDC hdc, wmfint m); wmfint SetMapMode(HDC hdc, wmfint m); wmfint IntersectClipRect(HDC hdc, wmfint d, wmfint c, wmfint b, wmfint a); /* This is not really part of GDI, but advanced GDI programming must make * use of the windoze versions, cause win9x GDI is 16 bit only and highly limited ... */ DWORD GetVersion (); } /* namespace W32 */ #endif /* _WMF_GDI_H_ */