home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l430 / 1.ddi / CHAP8.ZIP / GDIOBJ.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-09  |  6.3 KB  |  190 lines

  1. /* 
  2. GDIOBJ.H -- GDI-related structures
  3.  
  4. Local object types:
  5.     GDIOBJHDR/GDIOBJDBG
  6.     BRUSHOBJ
  7.     PENOBJ
  8.     PALETTEOBJ
  9.     FONTOBJ
  10.     BITMAPOBJ
  11.     DC
  12.         
  13. from Chapter 8 of "Undocumented Windows"  (Addison-Wesley, 1992)
  14. by Andrew Schulman, Dave Maxey and Matt Pietrek.
  15.  
  16. Copyright (c) Dave Maxey 1992
  17. */
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. // Minimum allocation for any object appears to be 16h bytes
  24.  
  25. typedef struct tagGDIOBJHDR {
  26.     HANDLE        hNext;      // 00h Handle to next (sometimes flags in 3.0)
  27.     WORD        wMagic;        // 02h Obj type in 3.0, Magic in 3.1
  28.     DWORD        dwCount;    // 04h Sequence number
  29.     WORD        wMetaList;    // 08h
  30.     } GDIOBJHDR, FAR *LPGDIOBJHDR;    // 0Ah total
  31.  
  32.  
  33. typedef struct tagGDIOBJDBG {
  34.     HANDLE        hNext;        // 00h Handle to next (sometimes flags in 3.0)
  35.     WORD        wMagic;        // 02h Obj type in 3.0, Magic in 3.1
  36.     DWORD        dwCount;    // 04h Sequence number
  37.     WORD        wMetaList;    // 08h
  38.     WORD        wSelCount;    // 0Ah Count of times selected???
  39.     HANDLE        hOwner;        // 0Ch Owning task
  40.     } GDIOBJDBG, FAR *LPGDIOBJDBG;    // 0Eh total
  41.  
  42.     
  43. // NOTE all offsets after 'header' from here on in this file will be
  44. // 4 bytes more when 3.1 DEBUG version is running
  45.  
  46. typedef struct tagBRUSHOBJ {
  47.     GDIOBJHDR    header;        // 00h
  48.     LOGBRUSH    logbrush;    // 0Ah
  49.     COLORREF    crHatchBk;    // 12h extra DWord for hatched brush color
  50.     }    BRUSHOBJ, FAR *LPBRUSHOBJ;    // 1Ah total
  51.  
  52.  
  53.  
  54. typedef struct tagPENOBJ {
  55.     GDIOBJHDR    header;        // 00h
  56.     LOGPEN        logpen;        // 0Ah
  57.     } PENOBJ, FAR *LPPENOBJ;        // 16h total
  58.  
  59.  
  60.  
  61. typedef struct tagPALETTEOBJ {
  62.     GDIOBJHDR    header;        // 00h
  63.     LOGPALETTE    logpalette;    // 0Ah
  64.     } PALETTEOBJ, FAR *LPPALETTEOBJ;// size depends on logpalette
  65.  
  66. typedef struct tagFONTOBJ {
  67.     GDIOBJHDR    header;        // 00h
  68.     LOGFONT        logfont;    // 0Ah
  69.     } FONTOBJ, FAR *LPFONTOBJ;        // size depends on strlen(typeface name) 
  70.  
  71.     
  72. typedef struct tagRGNOBJ {
  73.     GDIOBJHDR    header;        // 00h
  74. //    RGN            rgn;        // 0Ah
  75.     } RGNOBJ, FAR *LPRGNOBJ;
  76.  
  77. typedef struct tagBITMAPOBJ {
  78.     GDIOBJHDR    header;        // 00h
  79.     HANDLE        hmemBitmap;    // 0Ah
  80.     BOOL        bSelected;    // 0Ch Currently selected into a DC ???
  81.     HANDLE        h0E;        // 0Eh Unknown handle (not hDC as in book)
  82.     } BITMAPOBJ, FAR *LPBITMAPOBJ;
  83.  
  84.  
  85. typedef struct tagDC {
  86.     GDIOBJHDR    header;        // 00h 
  87.     BYTE    byFlags;        // 0Ah
  88.     BYTE    byFlags2;        // 0Bh
  89.     HANDLE    hMetaFile;        // 0Ch
  90.     HRGN    hrgnClip;        // 0Eh handle to (reclangular) clip region
  91.     HANDLE    hPDevice;        // 10h Phys device handle
  92.     HANDLE    hLPen;            // 12h Log. pen
  93.     HANDLE    hLBrush;        // 14h Log. brush
  94.     HANDLE    hLFont;            // 16h Log. Font
  95.     HANDLE    hBitmap;        // 18h Selected bitmap
  96.     HANDLE    dchPal;            // 1Ah Selected palette
  97.     HANDLE    hLDevice;        // 1Ch Log. device
  98.     HRGN    hRaoClip;        // 1Eh clip region
  99.     HANDLE    hPDeviceBlock;    // 20h
  100.     HANDLE    hPPen;            // 22h Phys. pen
  101.     HANDLE    hPBrush;        // 24h Phys. brush
  102.     HANDLE    hPFontTrans;    // 26h 
  103.     HANDLE    hPFont;            // 28h Phys. font
  104.     LPVOID    lpPDevice;        // 2Ah 
  105.     WORD    pLDevice;        // 2Eh near pointer to log. device info
  106.     WORD    pRaoClip;        // 30h near pointer to clip region
  107.     WORD    pPDeviceBlock;    // 32h near pointer to GDIINFO
  108.     WORD    pPPen;            // 34h 
  109.     WORD    pPBrush;        // 36h 
  110.     WORD    pPFontTrans;    // 38h near pointer to hPFontTrans
  111.     LPVOID    lpPFont;        // 3Ah Font engine entrypoint
  112.     int        nPFTIndex;        // 3Eh 
  113.     LPVOID    Transform;        // 40h 
  114.     /* Begin DRAWMODE structure - see DDK doc */
  115.     WORD    wROP2;            // 44h Raster Op drawing mode
  116.     WORD    wBkMode;        // 46h Background mode (opaque/transparent)
  117.     DWORD    dwBkColor;        // 48h Phys. Background color
  118.     DWORD    dwTextColor;    // 4Ch Phys. text color
  119.     int        nTBreakExtra;    // 50h Text padding for ExtTextOut justification
  120.     int        nBreakExtra;    // 52h pad per break = nTBreakExtra / BreakCount
  121.     WORD    wBreakErr;        // 54h SetTextJustify called with nBreakExtra = 0?
  122.     int        nBreakRem;        // 56h remainder of nTBreakExtra / nBreakCount
  123.     int        nBreakCount;    // 58h Count of break characters in string
  124.     int        nCharExtra;        // 5Ah Per char additional padding
  125.     DWORD    crLbkColor;        // 5Ch Logical background color
  126.     DWORD    crLTextColor;    // 60h Logical text color
  127.     /* End DRAWMODE structure */
  128.     int        LCursPosX;        // 64h Log curs pos X
  129.     int        LCursPosY;        // 66h Log curs pos Y
  130.     int        WndOrgX;         // 68h window origin X
  131.     int        WndOrgY;        // 6Ah window origin Y
  132.     int        WndExtX;        // 6Ch window width
  133.     int        WndExtY;        // 6Eh window height
  134.     int        VportOrgX;        // 70h viewport origin X
  135.     int        VportOrgY;        // 72h viewport origin Y
  136.     int        VportExtX;        // 74h viewport width
  137.     int        VportExtY;        // 76h viewport height
  138.     int        UserVptOrgX;    // 78h (USER/user ??) viewport origin X
  139.     int        UserVptOrgY;    // 7Ah (USER/user ??) viewport origin Y
  140.     WORD    wMapMode;        // 7Ch mapping mode
  141.     WORD    wXFormFlags;    // 7Eh 
  142.     WORD    wRelAbs;        // 80h Relative/absolute mode
  143.     WORD    wPolyFillMode;    // 82h Polygon fill mode
  144.     WORD    wStretchBltMode;// 84h Bitblt stretch mode
  145.     BYTE    byPlanes;        // 86h for DC
  146.     BYTE    byBitsPix;        // 87h for DC
  147.     WORD    wPenWidth;        // 88h pen width in pix
  148.     WORD    wPenHeight;        // 8Ah pen width in pix
  149.     WORD    wTextAlign;        // 8Ch Text alignment flags
  150.     DWORD    dwMapperFlags;    // 8Eh 
  151.     WORD    wBrushOrgX;        // 92h brush origin X
  152.     WORD    wBrushOrgY;        // 94h brush origin Y
  153.     WORD    wFontAspectX;    // 96h one half of font aspect ratio
  154.     WORD    wFontAspectY;    // 98h other half of font aspect ratio
  155.     HANDLE    hFontWeights;    // 9Ah handle to font weights
  156.     WORD    wDCSaveLevel;    // 9Ch depth of stack of saved DCSAVEs
  157.     WORD    wcDCLocks;        // 9Eh count of locks on DC
  158.     HRGN    hVisRgn;        // A0h Handle to visible region
  159.     WORD    wDCOrgX;        // A2h DC origin X
  160.     WORD    wDCOrgY;        // A4h DC origin Y
  161.     FARPROC    lpfnPrint;        // A6h print driver entrypoint
  162.     WORD    wDCLogAtom;        // AAh Logical device driver name atom
  163.     WORD    wDCPhysAtom;    // ACh Physical device name atom
  164.     WORD    wDCFileAtom;    // AEh FILE: port file name atom
  165.     WORD    wPostScaleX;    // B0h 
  166.     WORD    wPostScaleY;    // B2h 
  167.     union {
  168.         struct {            // 3.0 fields from here
  169.             WORD    wB4;            // B4h
  170.             RECT    rectB6;            // B6h rect
  171.             WORD    wDCGlobFlags;    // BEh Bit 0 indicates DC dirty
  172.             WORD    wC0;            // C0h
  173.             } tail_3_0;        // 3.0 size: C2h total
  174.  
  175.         struct {            // 3.1 fields from here
  176.             RECT    rectBounds;        // B4h Bounds rect
  177.             RECT    rectLVB;        // BCh "logical video buffer"
  178.             FARPROC    lpfnNotify;        // C4h Hook func
  179.             LPSTR    lpHookData;        // C8h hook data
  180.             WORD    wDCGlobFlags;    // CCh Bit 0 indicates DC dirty
  181.             HDC        hDCNext;        // CEh Next DC in linked list - Debug only
  182.             } tail_3_1;        // 3.1 size: CEh total nondebug, D6h debug
  183.         } dc_tail;
  184.     } DC, FAR *LPDC;
  185.  
  186.     
  187. #ifdef __cplusplus
  188. }
  189. #endif
  190.