⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntgdihdl.h

📁 这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统
💻 H
字号:
/*
 * COPYRIGHT:       See COPYING in the top level directory
 * PROJECT:         ReactOS Win32 Graphical Subsystem (WIN32K)
 * FILE:            include/win32k/ntgdihal.h
 * PURPOSE:         Win32 Shared GDI Handle/Object Types
 * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
 */

/* INCLUDES ******************************************************************/

#ifndef _NTGDIHDL_
#define _NTGDIHDL_

/* DEFINES *******************************************************************/

/* Base address where the handle table is mapped to */
#define GDI_HANDLE_TABLE_BASE_ADDRESS (0x400000)

/* GDI handle table can hold 0x4000 handles */
#define GDI_HANDLE_COUNT 0x4000
#define GDI_GLOBAL_PROCESS (0x0)

/* Handle Masks and shifts */
#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
#define GDI_HANDLE_TYPE_MASK  0x007f0000
#define GDI_HANDLE_STOCK_MASK 0x00800000
#define GDI_HANDLE_REUSE_MASK 0xff000000
#define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK)
#define GDI_HANDLE_REUSECNT_SHIFT 24

#define GDI_ENTRY_STOCK_MASK 0x00000080
#define GDI_ENTRY_REUSE_MASK 0x0000ff00
#define GDI_ENTRY_REUSE_INC 0x00000100
#define GDI_ENTRY_REUSECNT_SHIFT 8
#define GDI_ENTRY_UPPER_SHIFT 16

/*! \defgroup GDI object types
 *
 *  GDI object types
 *
 */
/*@{*/
#define GDI_OBJECT_TYPE_DC          0x00010000
#define GDI_OBJECT_TYPE_REGION      0x00040000
#define GDI_OBJECT_TYPE_BITMAP      0x00050000
#define GDI_OBJECT_TYPE_PALETTE     0x00080000
#define GDI_OBJECT_TYPE_FONT        0x000a0000
#define GDI_OBJECT_TYPE_BRUSH       0x00100000
#define GDI_OBJECT_TYPE_EMF         0x00210000
#define GDI_OBJECT_TYPE_PEN         0x00300000
#define GDI_OBJECT_TYPE_EXTPEN      0x00500000
#define GDI_OBJECT_TYPE_COLORSPACE  0x00090000
#define GDI_OBJECT_TYPE_METADC      0x00660000
#define GDI_OBJECT_TYPE_METAFILE    0x00260000
#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
/* Following object types made up for ROS */
#define GDI_OBJECT_TYPE_DONTCARE    0x007f0000
/** Not really an object type. Forces GDI_FreeObj to be silent. */
#define GDI_OBJECT_TYPE_SILENT      0x80000000
/*@}*/

/* Handle macros */
#define GDI_HANDLE_CREATE(i, t)    \
    ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK)))

#define GDI_HANDLE_GET_INDEX(h)    \
    (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)

#define GDI_HANDLE_GET_TYPE(h)     \
    (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)

#define GDI_HANDLE_IS_TYPE(h, t)   \
    ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK))

#define GDI_HANDLE_IS_STOCKOBJ(h)  \
    (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK))

#define GDI_HANDLE_SET_STOCKOBJ(h) \
    ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))

#define GDI_HANDLE_GET_UPPER(h)     \
    (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK)

#define GDI_HANDLE_GET_REUSECNT(h)     \
    (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT)

#define GDI_ENTRY_GET_REUSECNT(e)     \
    ((((ULONG_PTR)(e)) & GDI_ENTRY_REUSE_MASK) >> GDI_ENTRY_REUSECNT_SHIFT)

/* DC OBJ Types */
#define DC_TYPE_DIRECT 0  // normal device context
#define DC_TYPE_MEMORY 1  // memory device context
#define DC_TYPE_INFO   2  // information context

/* DC OBJ Flags */
#define DC_FLAG_DISPLAY            0x0001
#define DC_FLAG_DIRECT             0x0002
#define DC_FLAG_CANCELLED          0x0004
#define DC_FLAG_PERMANENT          0x0008
#define DC_FLAG_DIRTY_RAO          0x0010
#define DC_FLAG_ACCUM_WMGR         0x0020
#define DC_FLAG_ACCUM_APP          0x0040
#define DC_FLAG_RESET              0x0080
#define DC_FLAG_SYNCHRONIZEACCESS  0x0100
#define DC_FLAG_EPSPRINTINGESCAPE  0x0200
#define DC_FLAG_TEMPINFODC         0x0400
#define DC_FLAG_FULLSCREEN         0x0800
#define DC_FLAG_IN_CLONEPDEV       0x1000
#define DC_FLAG_REDIRECTION        0x2000
#define DC_FLAG_SHAREACCESS        0x4000

/* DC_ATTR Dirty Flags */
#define DIRTY_FILL                          0x00000001#define DIRTY_LINE                          0x00000002#define DIRTY_TEXT                          0x00000004#define DIRTY_BACKGROUND                    0x00000008#define DIRTY_CHARSET                       0x00000010#define SLOW_WIDTHS                         0x00000020#define DC_CACHED_TM_VALID                  0x00000040#define DISPLAY_DC                          0x00000080#define DIRTY_PTLCURRENT                    0x00000100#define DIRTY_PTFXCURRENT                   0x00000200#define DIRTY_STYLESTATE                    0x00000400#define DC_PLAYMETAFILE                     0x00000800#define DC_BRUSH_DIRTY                      0x00001000#define DC_PEN_DIRTY                        0x00002000#define DC_DIBSECTION                       0x00004000#define DC_LAST_CLIPRGN_VALID               0x00008000#define DC_PRIMARY_DISPLAY                  0x00010000
#define DC_MODE_DIRTY                       0x00200000
#define DC_FONTTEXT_DIRTY                   0x00400000

/* DC_ATTR LCD Flags */
#define LDC_LDC           0x00000001 // (init) local DC other than a normal DC
#define LDC_EMFLDC        0x00000002 // Enhance Meta File local DC
#define LDC_INIT_DOCUMENT 0x00000040
#define LDC_INIT_PAGE     0x00000080
#define LDC_KILL_DOCUMENT 0x00010000


/* DC_ATTR Xform Flags */
#define METAFILE_TO_WORLD_IDENTITY          0x00000001
#define WORLD_TO_PAGE_IDENTITY              0x00000002
#define DEVICE_TO_PAGE_INVALID              0x00000008
#define DEVICE_TO_WORLD_INVALID             0x00000010
#define WORLD_TRANSFORM_SET                 0x00000020
#define POSITIVE_Y_IS_UP                    0x00000040
#define INVALIDATE_ATTRIBUTES               0x00000080
#define PTOD_EFM11_NEGATIVE                 0x00000100
#define PTOD_EFM22_NEGATIVE                 0x00000200
#define ISO_OR_ANISO_MAP_MODE               0x00000400
#define PAGE_TO_DEVICE_IDENTITY             0x00000800
#define PAGE_TO_DEVICE_SCALE_IDENTITY       0x00001000
#define PAGE_XLATE_CHANGED                  0x00002000
#define PAGE_EXTENTS_CHANGED                0x00004000
#define WORLD_XFORM_CHANGED                 0x00008000

/* TYPES *********************************************************************/

typedef struct _GDI_TABLE_ENTRY
{
    PVOID KernelData; /* Points to the kernel mode structure */
    HANDLE ProcessId; /* process id that created the object, 0 for stock objects */
    LONG Type;        /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
    PVOID UserData;   /* Points to the user mode structure, usually NULL though */
} GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY;

typedef struct _RGNATTR{    ULONG AttrFlags;    ULONG Flags;    RECTL Rect;} RGNATTR,*PRGNATTR;

// Local DC structure (_DC_ATTR) PVOID pvLDC;
typedef struct _LDC
{
    HDC hDC;
    ULONG Flags;
    INT iType;
    PVOID pvEmfDC;        /* Pointer to ENHMETAFILE structure */
    ABORTPROC pAbortProc; /* AbortProc for Printing */
    HANDLE hPrinter;      /* Local or Remote Printer driver */
    INT iInitPage;        /* Start/Stop */
    INT iInitDocument;
} LDC, *PLDC;

typedef struct _DC_ATTR
{
    PVOID pvLDC;    ULONG ulDirty_;    HANDLE hbrush;    HANDLE hpen;    COLORREF crBackgroundClr;    ULONG ulBackgroundClr;    COLORREF crForegroundClr;    ULONG ulForegroundClr;    COLORREF crBrushClr;    ULONG ulBrushClr;    COLORREF crPenClr;    ULONG ulPenClr;    DWORD iCS_CP;    INT iGraphicsMode;    BYTE jROP2;    BYTE jBkMode;    BYTE jFillMode;    BYTE jStretchBltMode;    POINTL ptlCurrent;    POINTL ptfxCurrent;    LONG lBkMode;    LONG lFillMode;    LONG lStretchBltMode;    FLONG flFontMapper;    LONG lIcmMode;    HANDLE hcmXform;    HCOLORSPACE hColorSpace;    FLONG flIcmFlags;
    INT IcmBrushColor;    INT IcmPenColor;
    PVOID pvLIcm;    FLONG flTextAlign;    LONG lTextAlign;    LONG lTextExtra;    LONG lRelAbs;    LONG lBreakExtra;    LONG cBreak;    HANDLE hlfntNew;    MATRIX_S mxWorldToDevice;    MATRIX_S mxDevicetoWorld;    MATRIX_S mxWorldToPage;    EFLOAT_S efM11PtoD;
    EFLOAT_S efM22PtoD;
    EFLOAT_S efDxPtoD;
    EFLOAT_S efDyPtoD;
    INT iMapMode;    DWORD dwLayout;    LONG lWindowOrgx;    POINTL ptlWindowOrg;    SIZEL szlWindowExt;    POINTL ptlViewportOrg;    SIZEL szlViewportExt;    FLONG flXform;    SIZEL szlVirtualDevicePixel;    SIZEL szlVirtualDeviceMm;
    SIZEL szlVirtualDeviceSize;    POINTL ptlBrushOrigin;    RGNATTR VisRectRegion;
} DC_ATTR, *PDC_ATTR;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -