/* wingdi.h*/ /* * Copyright (c) 1999,2000,2001,2005 Greg Haerr * * Win32 GDI structures and API */ #ifndef _WINGDI_H_ #define _WINGDI_H_ #include "device.h" #define FAR /* portable coordinate definition*/ typedef MWCOORD GDICOORD; typedef RECT NEAR *PRECT, FAR *LPRECT; typedef POINT NEAR *PPOINT, FAR *LPPOINT; typedef struct tagSIZE { GDICOORD cx; GDICOORD cy; } SIZE, NEAR *PSIZE, FAR *LPSIZE; /* GetDCEx flags*/ #define DCX_WINDOW 0x00000001L #define DCX_CACHE 0x00000002L #define DCX_NORESETATTRS 0x00000004L #define DCX_CLIPCHILDREN 0x00000008L #define DCX_CLIPSIBLINGS 0x00000010L #define DCX_PARENTCLIP 0x00000020L #define DCX_EXCLUDERGN 0x00000040L #define DCX_INTERSECTRGN 0x00000080L #define DCX_EXCLUDEUPDATE 0x00000100L #define DCX_INTERSECTUPDATE 0x00000200L #define DCX_LOCKWINDOWUPDATE 0x00000400L #define DCX_VALIDATE 0x00200000L #define DCX_DEFAULTCLIP 0x80000000L /* microwin only*/ HDC WINAPI GetDCEx(HWND hwnd,HRGN hrgnClip,DWORD flags); HDC WINAPI GetDC(HWND hWnd); HDC WINAPI GetWindowDC(HWND hWnd); int WINAPI ReleaseDC(HWND hWnd, HDC hDC); BOOL WINAPI DeleteDC(HDC hdc); typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; /* indicates bkgnd needs erasing*/ RECT rcPaint; /* nyi*/ BOOL fRestore; /* nyi*/ BOOL fIncUpdate; /* nyi*/ BYTE rgbReserved[32]; } PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, FAR *LPPAINTSTRUCT; HDC WINAPI BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint); BOOL WINAPI EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint); typedef HANDLE HDWP; HDWP BeginDeferWindowPos(int nNumWindows); HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags); BOOL EndDeferWindowPos(HDWP hWinPosInfo); // // rgb format is 0xAARRGGBB // #define RGB(r,g,b) MWRGB(r,g,b) #define GetBValue(rgb) ((BYTE)(rgb)) #define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8)) #define GetRValue(rgb) ((BYTE)((rgb)>>16)) #define GetAValue(rgb) ((BYTE)((rgb)>>24)) /* Background Modes */ #define TRANSPARENT 1 #define OPAQUE 2 /* Text Alignment*/ #define TA_NOUPDATECP 0 #define TA_UPDATECP 1 #define TA_LEFT 0 #define TA_RIGHT 2 #define TA_CENTER 6 #define TA_TOP 0 #define TA_BOTTOM 8 #define TA_BASELINE 24 #define TA_RTLREADING 256 #define TA_MASK (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING) COLORREF WINAPI SetTextColor(HDC, COLORREF); COLORREF WINAPI GetTextColor(HDC hdc); COLORREF WINAPI SetBkColor(HDC, COLORREF); int WINAPI SetBkMode(HDC, int); UINT WINAPI SetTextAlign(HDC hdc, UINT fMode); UINT WINAPI GetTextAlign(HDC hdc); /* Binary raster ops*/ #define R2_BLACK (MWROP_CLEAR+1) /* 0 */ #define R2_NOTMERGEPEN (MWROP_NOR+1) /* DPon */ #define R2_MASKNOTPEN (MWROP_ANDINVERTED+1) /* DPna */ #define R2_NOTCOPYPEN (MWROP_COPYINVERTED+1) /* Pn */ #define R2_MASKPENNOT (MWROP_ANDREVERSE+1) /* PDna */ #define R2_NOT (MWROP_INVERT+1) /* Dn */ #define R2_XORPEN (MWROP_XOR+1) /* DPx */ #define R2_NOTMASKPEN (MWROP_NAND+1) /* DPan */ #define R2_MASKPEN (MWROP_AND+1) /* DPa */ #define R2_NOTXORPEN (MWROP_EQUIV+1) /* DPxn */ #define R2_NOP (MWROP_NOOP+1) /* D */ #define R2_MERGENOTPEN (MWROP_ORINVERTED+1) /* DPno */ #define R2_COPYPEN (MWROP_COPY+1) /* P */ #define R2_MERGEPENNOT (MWROP_ORREVERSE+1) /* PDno */ #define R2_MERGEPEN (MWROP_OR+1) /* DPo */ #define R2_WHITE (MWROP_SET+1) /* 1 */ #define R2_LAST 16 int WINAPI SetROP2(HDC hdc, int fnDrawMode); #define GDI_ERROR (0xFFFFFFFFL) #define CLR_INVALID 0xFFFFFFFF COLORREF WINAPI GetPixel(HDC hdc, int x, int y); COLORREF WINAPI SetPixel(HDC hdc, int x, int y, COLORREF crColor); BOOL WINAPI MoveToEx(HDC hdc, int x, int y, LPPOINT lpPoint); BOOL WINAPI LineTo(HDC hdc, int x, int y); BOOL WINAPI Polyline(HDC hdc, CONST POINT *lppt, int cPoints); BOOL WINAPI PolyPolygon(HDC hdc, CONST POINT *lpPoints, LPINT lpPolyCounts, int nCount); BOOL WINAPI Rectangle(HDC hdc, int nLeft, int nTop, int nRight,int nBottom); BOOL WINAPI Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); BOOL WINAPI Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc); BOOL WINAPI Pie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2); BOOL WINAPI Polygon(HDC hdc, CONST POINT *lpPoints, int nCount); int WINAPI FillRect(HDC hDC, CONST RECT *lprc, HBRUSH hbr); int WINAPI MwFastFillRect (HDC hDC, CONST RECT *lprc, COLORREF crColor); BOOL WINAPI DrawFocusRect(HDC hdc, LPRECT prect); /* ExTextOut options*/ #define ETO_OPAQUE 0x0002 #define ETO_CLIPPED 0x0004 /* nyi*/ BOOL WINAPI TextOut(HDC hdc, int x, int y, LPCWSTR lpszString, int cbString); BOOL WINAPI TextOutW(HDC hdc, int x, int y, LPCWSTR lpszString, int cbString); BOOL WINAPI ExtTextOut(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, LPCSTR lpszString, UINT cbCount, CONST INT *lpDx); BOOL WINAPI ExtTextOutW(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, LPCWSTR lpszString, UINT cbCount, CONST INT *lpDx); LONG WINAPI TabbedTextOut ( HDC hdc, int x, int y, LPCTSTR lpszString, int cbString, int ntabs, LPINT lpTabStops, int nTabOrigin ); DWORD WINAPI GetTabbedTextExtent ( HDC hdc, int x, int y, LPCTSTR lpszString, int cbString, int ntabs, LPINT lpTabStops ); /* DrawText options*/ #define DT_TOP 0x00000000 #define DT_LEFT 0x00000000 #define DT_CENTER 0x00000001 #define DT_RIGHT 0x00000002 #define DT_VCENTER 0x00000004 #define DT_BOTTOM 0x00000008 #define DT_WORDBREAK 0x00000010 #define DT_SINGLELINE 0x00000020 #define DT_EXPANDTABS 0x00000040 #define DT_TABSTOP 0x00000080 #define DT_NOCLIP 0x00000100 #define DT_EXTERNALLEADING 0x00000200 #define DT_CALCRECT 0x00000400 #define DT_NOPREFIX 0x00000800 #define DT_INTERNAL 0x00001000 #define DT_EDITCONTROL 0x00002000 #define DT_PATH_ELLIPSIS 0x00004000 #define DT_END_ELLIPSIS 0x00008000 #define DT_MODIFYSTRING 0x00010000 #define DT_RTLREADING 0x00020000 #define DT_WORD_ELLIPSIS 0x00040000 #define DT_STRETCH 0x00080000 #define DT_GRAY 0x00100000 #define DT_LIGHT 0x00200000 #define DT_HTML_TEXT 0x00400000 int WINAPI DrawText (HDC hdc, LPCWSTR lpString, int nCount, LPRECT lpRect, UINT uStyle); BOOL WINAPI DrawDIB(HDC hdc,int x, int y,PMWIMAGEHDR pimage); /* microwin*/ /* GetSysColor, FillRect colors*/ #define COLOR_SCROLLBAR 0 #define COLOR_BACKGROUND 1 #define COLOR_ACTIVECAPTION 2 #define COLOR_INACTIVECAPTION 3 #define COLOR_MENU 4 #define COLOR_WINDOW 5 #define COLOR_WINDOWFRAME 6 #define COLOR_MENUTEXT 7 #define COLOR_WINDOWTEXT 8 #define COLOR_CAPTIONTEXT 9 #define COLOR_ACTIVEBORDER 10 #define COLOR_INACTIVEBORDER 11 #define COLOR_APPWORKSPACE 12 #define COLOR_HIGHLIGHT 13 #define COLOR_HIGHLIGHTTEXT 14 #define COLOR_BTNFACE 15 #define COLOR_BTNSHADOW 16 #define COLOR_GRAYTEXT 17 #define COLOR_BTNTEXT 18 #define COLOR_INACTIVECAPTIONTEXT 19 #define COLOR_BTNHIGHLIGHT 20 #define COLOR_3DDKSHADOW 21 #define COLOR_3DLIGHT 22 #define COLOR_INFOTEXT 23 #define COLOR_INFOBK 24 #define COLOR_DESKTOP COLOR_BACKGROUND #define COLOR_3DFACE COLOR_BTNFACE #define COLOR_3DSHADOW COLOR_BTNSHADOW #define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT #define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT #define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT #define COLOR_ALTERNATEBUTTONFACE 25 #define COLOR_HOTLIGHT 26 #define COLOR_GRADIENTACTIVECAPTION 27 #define COLOR_GRADIENTINACTIVECAPTION 28 DWORD WINAPI GetSysColor(int nIndex); COLORREF WINAPI SetSysColor(int nIndex, COLORREF crColor);/* Microwindows only*/ HBRUSH WINAPI GetSysColorBrush(int nIndex); /* Stock Logical Objects */ #define WHITE_BRUSH 0 #define LTGRAY_BRUSH 1 #define GRAY_BRUSH 2 #define DKGRAY_BRUSH 3 #define BLACK_BRUSH 4 #define NULL_BRUSH 5 #define HOLLOW_BRUSH NULL_BRUSH #define WHITE_PEN 6 #define BLACK_PEN 7 #define NULL_PEN 8 #define OEM_FIXED_FONT 10 #define ANSI_FIXED_FONT 11 #define ANSI_VAR_FONT 12 #define SYSTEM_FONT 13 #define DEVICE_DEFAULT_FONT 14 #define DEFAULT_PALETTE 15 #define SYSTEM_FIXED_FONT 16 #define DEFAULT_GUI_FONT 17 #define DC_BRUSH 18 #define DC_PEN 19 #define STOCK_LAST 19 /* Object types*/ #define OBJ_PEN 1 #define OBJ_BRUSH 2 #define OBJ_DC 3 #define OBJ_METADC 4 #define OBJ_PAL 5 #define OBJ_FONT 6 #define OBJ_BITMAP 7 #define OBJ_REGION 8 #define OBJ_METAFILE 9 #define OBJ_MEMDC 10 #define OBJ_EXTPEN 11 #define OBJ_ENHMETADC 12 #define OBJ_ENHMETAFILE 13 HGDIOBJ WINAPI GetStockObject(int nObject); HGDIOBJ WINAPI SelectObject(HDC hdc, HGDIOBJ hObject); BOOL WINAPI DeleteObject(HGDIOBJ hObject); int WINAPI SelectClipRgn(HDC hdc, HRGN hrgn); int WINAPI ExtSelectClipRgn(HDC hdc, HRGN hrgn, int fnMode); int WINAPI GetUpdateRgn(HWND hwnd, HRGN hrgn, BOOL bErase); BOOL WINAPI GetUpdateRect(HWND hwnd, LPRECT lpRect, BOOL bErase); /* Brush Styles */ #define BS_SOLID 0 #define BS_NULL 1 #define BS_HOLLOW BS_NULL HBRUSH WINAPI CreateSolidBrush(COLORREF crColor); /* Pen Styles */ #define PS_SOLID 0 #define PS_NULL 5 HPEN WINAPI CreatePen(int nPenStyle, int nWidth, COLORREF crColor); HBITMAP WINAPI CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight); /* constants for the biCompression field */ #define BI_RGB 0L #define BI_RLE8 1L #define BI_RLE4 2L #define BI_BITFIELDS 3L #pragma pack(2) typedef struct tagBITMAPINFOHEADER { // bmih DWORD PACKEDDATA biSize; LONG PACKEDDATA biWidth; LONG PACKEDDATA biHeight; WORD PACKEDDATA biPlanes; WORD PACKEDDATA biBitCount; DWORD PACKEDDATA biCompression; DWORD PACKEDDATA biSizeImage; LONG PACKEDDATA biXPelsPerMeter; LONG PACKEDDATA biYPelsPerMeter; DWORD PACKEDDATA biClrUsed; DWORD PACKEDDATA biClrImportant; } BITMAPINFOHEADER; #pragma pack() typedef struct tagRGBQUAD { // rgbq BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; typedef struct tagBITMAPINFO { // bmi BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO; /* DIB color table identifiers */ #define DIB_RGB_COLORS 0 /* color table in RGBs */ #define DIB_PAL_COLORS 1 /* color table in palette indices */ HBITMAP CreateDIBSection( HDC hdc, CONST BITMAPINFO *pbmi, UINT iUsage, VOID **ppvBits, HANDLE hSection, DWORD dwOffset); HDC WINAPI CreateCompatibleDC(HDC hdc); /* BitBlit raster opcodes*/ #define SRCCOPY (DWORD)MWROP_COPY /* source */ #define SRCPAINT (DWORD)MWROP_OR /* source OR dest */ #define SRCAND (DWORD)MWROP_AND /* source AND dest */ #define SRCINVERT (DWORD)MWROP_XOR /* source XOR dest */ #define SRCERASE (DWORD)MWROP_ANDREVERSE /* source AND (NOT dest ) */ #define NOTSRCCOPY (DWORD)MWROP_COPYINVERTED /* (NOT source) */ #define NOTSRCERASE (DWORD)MWROP_NOR /* (NOT src) AND (NOT dest) */ #define MERGEPAINT (DWORD)MWROP_ORINVERTED /* (NOT source) OR dest */ #define DSTINVERT (DWORD)MWROP_INVERT /* (NOT dest) */ #define BLACKNESS (DWORD)MWROP_CLEAR /* BLACK */ #define WHITENESS (DWORD)MWROP_SET /* WHITE */ BOOL WINAPI BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight, HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop); BOOL WINAPI StretchBlt(HDC hdcDest,int nXOriginDest,int nYOriginDest, int nWidthDest,int nHeightDest,HDC hdcSrc, int nXOriginSrc,int nYOriginSrc,int nWidthSrc, int nHeightSrc, DWORD dwRop); /* Palette entry flags*/ #define PC_RESERVED 0x01 #define PC_EXPLICIT 0x02 #define PC_NOCOLLAPSE 0x04 typedef struct tagPALETTEENTRY { BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY; UINT WINAPI GetSystemPaletteEntries(HDC hdc,UINT iStartIndex,UINT nEntries, LPPALETTEENTRY lppe); /* GetDeviceCaps parameters*/ #define HORZRES 8 /* Horizontal width in pixels */ #define VERTRES 10 /* Vertical height in pixels */ #define BITSPIXEL 12 /* Number of bits per pixel */ #define PLANES 14 /* Number of planes */ #define LOGPIXELSX 88 /* Logical pixels/inch in X */ #define LOGPIXELSY 90 /* Logical pixels/inch in Y */ #define SIZEPALETTE 104 /* Number of entries in physical palette */ int WINAPI GetDeviceCaps(HDC hdc, int nIndex); /* Region flags*/ #define ERRORREGION MWREGION_ERROR #define NULLREGION MWREGION_NULL #define SIMPLEREGION MWREGION_SIMPLE #define COMPLEXREGION MWREGION_COMPLEX /* kluge for VxWorks*/ #ifdef ERROR #undef ERROR #endif #define ERROR ERRORREGION #define RGN_ERROR ERRORREGION /* CombineRgn() Styles */ #define RGN_AND 1 #define RGN_OR 2 #define RGN_XOR 3 #define RGN_DIFF 4 #define RGN_COPY 5 #define RGN_MIN RGN_AND #define RGN_MAX RGN_COPY /* GetRegionData/ExtCreateRegion */ #define RDH_RECTANGLES 1 typedef struct _RGNDATAHEADER { DWORD dwSize; DWORD iType; DWORD nCount; DWORD nRgnSize; RECT rcBound; } RGNDATAHEADER, *PRGNDATAHEADER; typedef struct _RGNDATA { RGNDATAHEADER rdh; char Buffer[1]; } RGNDATA, *PRGNDATA, *NPRGNDATA, *LPRGNDATA; /* Region entry points*/ INT WINAPI OffsetRgn(HRGN hrgn, INT x, INT y ); INT WINAPI GetRgnBox(HRGN hrgn, LPRECT rect ); HRGN WINAPI CreateRectRgn(INT left, INT top, INT right, INT bottom); HRGN WINAPI CreateRectRgnIndirect(const RECT* rect ); VOID WINAPI SetRectRgn(HRGN hrgn, INT left, INT top, INT right, INT bottom ); HRGN WINAPI CreateRoundRectRgn(INT left, INT top, INT right, INT bottom, INT ellipse_width, INT ellipse_height ); HRGN WINAPI CreateEllipticRgn(INT left, INT top, INT right, INT bottom ); HRGN WINAPI CreateEllipticRgnIndirect(const RECT *rect ); HRGN WINAPI CreatePolygonRgn(const POINT *points, INT count, INT mode); DWORD WINAPI GetRegionData(HRGN hrgn, DWORD count, LPRGNDATA rgndata); BOOL WINAPI PtInRegion(HRGN hrgn, INT x, INT y ); BOOL WINAPI RectInRegion(HRGN hrgn, const RECT *rect ); BOOL WINAPI EqualRgn(HRGN hrgn1, HRGN hrgn2 ); INT WINAPI CombineRgn(HRGN hDest, HRGN hSrc1, HRGN hSrc2, INT mode); BOOL FillRgn(HDC hdc, HRGN hrgn, HBRUSH hbr); /* GDI math stuff */ int WINAPI MulDiv(int nMultiplicand, int nMultiplier, int nDivisor); COLORREF WINAPI SetDCBrushColor ( HDC Hdc, COLORREF Color ); COLORREF WINAPI SetDCPenColor ( HDC Hdc, COLORREF Color ); #define MoveTo(hdc, x, y) (MoveToEx(hdc, x, y, NULL)) BOOL WINAPI GetTextExtentPoint32(HDC hdc,LPCTSTR lpszStr,int cchString, LPSIZE lpSize); int WINAPI GetClipBox ( HDC Hdc, RECT *Rc ); #undef FAR #endif