📄 winddi.h
字号:
ULONG ulHorzSize;
ULONG ulVertSize;
ULONG ulHorzRes;
ULONG ulVertRes;
ULONG cBitsPixel;
ULONG cPlanes;
ULONG ulNumColors;
ULONG flRaster;
ULONG ulLogPixelsX;
ULONG ulLogPixelsY;
ULONG flTextCaps;
ULONG ulDACRed;
ULONG ulDACGreen;
ULONG ulDACBlue;
ULONG ulAspectX;
ULONG ulAspectY;
ULONG ulAspectXY;
LONG xStyleStep;
LONG yStyleStep;
LONG denStyleStep;
POINTL ptlPhysOffset;
SIZEL szlPhysSize;
ULONG ulNumPalReg;
// These fields are for halftone initialization.
COLORINFO ciDevice;
ULONG ulDevicePelsDPI;
ULONG ulPrimaryOrder;
ULONG ulHTPatternSize;
ULONG ulHTOutputFormat;
ULONG flHTFlags;
ULONG ulVRefresh;
ULONG ulBltAlignment;
ULONG ulPanningHorzRes;
ULONG ulPanningVertRes;
ULONG xPanningAlignment;
ULONG yPanningAlignment;
// The following fields are for user defined halftone dither patterns. These
// fields are only checked if ulHTPatternSize is eqaul to HT_PATSIZE_USER.
//
// The user defined pHTPatA, pHTPatB, pHTPatC pointers correspond to the primary
// color order defined in ulPrimaryOrder as PRIMARY_ORDER_xxx.
//
// The size of halftone dither pattern must range from 4 to 256. For each
// dither pattern, pHTPatA, pHTPatB, pHTPatC must point to a
// valid byte array of (cxHTPat x cyHTPat) size. pHTPatA, pHTPatB and
// pHTPatC may point to the same dither pattern array.
//
// Each byte threshold within the dither pattern defines the additive
// intensity threshold of pixels. A zero threshold value indicates the pixel
// location is ignored (always black), while 1 to 255 threshold values give the
// dither pattern 255 level of grays.
ULONG cxHTPat; // cxHTPat must range from 4-256
ULONG cyHTPat; // cyHTPat must range from 4-256
LPBYTE pHTPatA; // for Primary Color Order A
LPBYTE pHTPatB; // for Primary Color Order B
LPBYTE pHTPatC; // for Primary Color Order C
// Shade and blend caps
ULONG flShadeBlend;
ULONG ulPhysicalPixelCharacteristics;
ULONG ulPhysicalPixelGamma;
} GDIINFO, *PGDIINFO;
/*
* User objects
*/
typedef struct _BRUSHOBJ
{
ULONG iSolidColor;
PVOID pvRbrush;
FLONG flColorType;
} BRUSHOBJ;
//
// BRUSHOBJ::flColorType
//
#define BR_DEVICE_ICM 0x01
#define BR_HOST_ICM 0x02
#define BR_CMYKCOLOR 0x04
typedef struct _CLIPOBJ
{
ULONG iUniq;
RECTL rclBounds;
BYTE iDComplexity;
BYTE iFComplexity;
BYTE iMode;
BYTE fjOptions;
} CLIPOBJ;
typedef struct _DRIVEROBJ DRIVEROBJ;
typedef BOOL (CALLBACK * FREEOBJPROC)(DRIVEROBJ *pDriverObj);
typedef struct _DRIVEROBJ
{
PVOID pvObj;
FREEOBJPROC pFreeProc;
HDEV hdev;
DHPDEV dhpdev;
} DRIVEROBJ;
typedef struct _FONTOBJ
{
ULONG iUniq;
ULONG iFace;
ULONG cxMax;
FLONG flFontType;
ULONG_PTR iTTUniq;
ULONG_PTR iFile;
SIZE sizLogResPpi;
ULONG ulStyleSize;
PVOID pvConsumer;
PVOID pvProducer;
} FONTOBJ;
typedef struct _BLENDOBJ
{
BLENDFUNCTION BlendFunction;
}BLENDOBJ,*PBLENDOBJ;
typedef BYTE GAMMA_TABLES[2][256];
//
// FONTOBJ::flFontType
//
#define FO_TYPE_RASTER RASTER_FONTTYPE /* 0x1 */
#define FO_TYPE_DEVICE DEVICE_FONTTYPE /* 0x2 */
#define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE /* 0x4 */
#define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE /* 0X8 */
#define FO_SIM_BOLD 0x00002000
#define FO_SIM_ITALIC 0x00004000
#define FO_EM_HEIGHT 0x00008000
#define FO_GRAY16 0x00010000 /* [1] */
#define FO_NOGRAY16 0x00020000 /* [1] */
#define FO_NOHINTS 0x00040000 /* [3] */
#define FO_NO_CHOICE 0x00080000 /* [3] */
// new accelerators so that printer drivers do not need to look to ifimetrics
#define FO_CFF 0x00100000
#define FO_POSTSCRIPT 0x00200000
#define FO_MULTIPLEMASTER 0x00400000
#define FO_VERT_FACE 0x00800000
#define FO_DBCS_FONT 0X01000000
/**************************************************************************\
*
* [1]
*
* If the FO_GRAY16 flag is set then the bitmaps of the font
* are 4-bit per pixel blending (alpha) values. A value of zero
* means that the the resulting pixel should be equal to the
* background color. If the value of the alpha value is k != 0
* then the resulting pixel must be:
*
* c0 = background color
* c1 = foreground color
* b = blending value = (k+1)/16 // {k = 1,2,..,15}
* b = 0 (k = 0)
* d0 = gamma[c0], d1 = gamma[c1] // luminance components
* d = (1 - b)*d0 + b*d1 // blended luminance
* c = lambda[d] // blended device voltage
*
* where gamma[] takes a color component from application space
* to CIE space and labmda[] takes a color from CIE space to
* device color space
*
* GDI will set this bit if it request a font be gray scaled
* to 16 values then GDI will set FO_GRAY16 upon entry to
* DrvQueryFontData(). If the font driver cannot (or will
* not) grayscale a particular realization of a font then the
* font provider will zero out FO_GRAY16 and set FO_NOGRAY16
* to inform GDI that
* the gray scaling request cannot (or should not) be
* satisfied.
*
* [2]
*
* The FO_NOHINTS indicates that hints were not used in the formation
* of the glyph images. GDI will set this bit to request that hinting
* be supressed. The font provider will set this bit accroding to the
* rendering scheme that it used in generating the glyph image.
*
* [3]
*
* The FO_NO_CHOICE flag indicates that the flags FO_GRAY16 and
* FO_NOHINTS must be obeyed if at all possible.
*
\**************************************************************************/
typedef struct _PALOBJ
{
ULONG ulReserved;
} PALOBJ;
typedef struct _PATHOBJ
{
FLONG fl;
ULONG cCurves;
} PATHOBJ;
typedef struct _SURFOBJ
{
DHSURF dhsurf;
HSURF hsurf;
DHPDEV dhpdev;
HDEV hdev;
SIZEL sizlBitmap;
ULONG cjBits;
PVOID pvBits;
PVOID pvScan0;
LONG lDelta;
ULONG iUniq;
ULONG iBitmapFormat;
USHORT iType;
USHORT fjBitmap;
} SURFOBJ;
typedef struct _WNDOBJ
{
CLIPOBJ coClient;
PVOID pvConsumer;
RECTL rclClient;
SURFOBJ *psoOwner;
} WNDOBJ, *PWNDOBJ;
typedef struct _XFORMOBJ
{
ULONG ulReserved;
} XFORMOBJ;
typedef struct _XLATEOBJ
{
ULONG iUniq;
FLONG flXlate;
USHORT iSrcType; // Obsolete
USHORT iDstType; // Obsolete
ULONG cEntries;
ULONG *pulXlate;
} XLATEOBJ;
/*
* BRUSHOBJ callbacks
*/
PVOID APIENTRY BRUSHOBJ_pvAllocRbrush(
BRUSHOBJ *pbo,
ULONG cj
);
PVOID APIENTRY BRUSHOBJ_pvGetRbrush(
BRUSHOBJ *pbo
);
ULONG APIENTRY BRUSHOBJ_ulGetBrushColor(
BRUSHOBJ *pbo
);
HANDLE APIENTRY BRUSHOBJ_hGetColorTransform(
BRUSHOBJ *pbo
);
/*
* CLIPOBJ callbacks
*/
#define DC_TRIVIAL 0
#define DC_RECT 1
#define DC_COMPLEX 3
#define FC_RECT 1
#define FC_RECT4 2
#define FC_COMPLEX 3
#define TC_RECTANGLES 0
#define TC_PATHOBJ 2
#define OC_BANK_CLIP 1 // Obsolete
#define CT_RECTANGLES 0L
#define CD_RIGHTDOWN 0L
#define CD_LEFTDOWN 1L
#define CD_RIGHTUP 2L
#define CD_LEFTUP 3L
#define CD_ANY 4L
#define CD_LEFTWARDS 1L
#define CD_UPWARDS 2L
typedef struct _ENUMRECTS
{
ULONG c;
RECTL arcl[1];
} ENUMRECTS;
ULONG APIENTRY CLIPOBJ_cEnumStart(
CLIPOBJ *pco,
BOOL bAll,
ULONG iType,
ULONG iDirection,
ULONG cLimit
);
BOOL APIENTRY CLIPOBJ_bEnum(
CLIPOBJ *pco,
ULONG cj,
ULONG *pul
);
PATHOBJ* APIENTRY CLIPOBJ_ppoGetPath(
CLIPOBJ* pco
);
/*
* FONTOBJ callbacks
*/
typedef struct _GLYPHBITS
{
POINTL ptlOrigin;
SIZEL sizlBitmap;
BYTE aj[1];
} GLYPHBITS;
#define FO_HGLYPHS 0L
#define FO_GLYPHBITS 1L
#define FO_PATHOBJ 2L
#define FD_NEGATIVE_FONT 1L
#define FO_DEVICE_FONT 1L
#define FO_OUTLINE_CAPABLE 2L
typedef union _GLYPHDEF
{
GLYPHBITS *pgb;
PATHOBJ *ppo;
} GLYPHDEF;
typedef struct _GLYPHPOS /* gp */
{
HGLYPH hg;
GLYPHDEF *pgdf;
POINTL ptl;
} GLYPHPOS,*PGLYPHPOS;
// individual glyph data
// r is a unit vector along the baseline in device coordinates.
// s is a unit vector in the ascent direction in device coordinates.
// A, B, and C, are simple tranforms of the notional space versions into
// (28.4) device coordinates. The dot products of those vectors with r
// are recorded here. Note that the high words of ptqD are also 28.4
// device coordinates. The low words provide extra accuracy.
// THE STRUCTURE DIFFERS IN ORDERING FROM NT 3.51 VERSION OF THE STRUCTURE.
// ptqD has been moved to the bottom.
// This requires only recompile of all the drivers.
typedef struct _GLYPHDATA {
GLYPHDEF gdf; // pointer to GLYPHBITS or to PATHOBJ
HGLYPH hg; // glyhp handle
FIX fxD; // Character increment amount: D*r.
FIX fxA; // Prebearing amount: A*r.
FIX fxAB; // Advancing edge of character: (A+B)*r.
FIX fxInkTop; // Baseline to inkbox top along s.
FIX fxInkBottom; // Baseline to inkbox bottom along s.
RECTL rclInk; // Ink box with sides parallel to x,y axes
POINTQF ptqD; // Character increment vector: D=A+B+C.
} GLYPHDATA;
// flAccel flags for STROBJ
// SO_FLAG_DEFAULT_PLACEMENT // defult inc vectors used to position chars
// SO_HORIZONTAL // "left to right" or "right to left"
// SO_VERTICAL // "top to bottom" or "bottom to top"
// SO_REVERSED // set if horiz & "right to left" or if vert & "bottom to top"
// SO_ZERO_BEARINGS // all glyphs have zero a and c spaces
// SO_CHAR_INC_EQUAL_BM_BASE // base == cx for horiz, == cy for vert.
// SO_MAXEXT_EQUAL_BM_SIDE // side == cy for horiz, == cx for vert.
// do not substitute device font for tt font even if device font sub table
// tells the driver this should be done
// SO_DO_NOT_SUBSTITUTE_DEVICE_FONT
#define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
#define SO_HORIZONTAL 0x00000002
#define SO_VERTICAL 0x00000004
#define SO_REVERSED 0x00000008
#define SO_ZERO_BEARINGS 0x00000010
#define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
#define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
#define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
#define SO_GLYPHINDEX_TEXTOUT 0x00000100
#define SO_ESC_NOT_ORIENT 0x00000200
#define SO_DXDY 0x00000400
#define SO_CHARACTER_EXTRA 0x00000800
#define SO_BREAK_EXTRA 0x00001000
typedef struct _STROBJ
{
ULONG cGlyphs; // # of glyphs to render
FLONG flAccel; // accel flags
ULONG ulCharInc; // non-zero only if fixed pitch font, equal to advanced width.
RECTL rclBkGround; // bk ground rect of the string in device coords
GLYPHPOS *pgp; // If non-NULL then has all glyphs.
LPWSTR pwszOrg; // pointer to original unicode string.
} STROBJ;
typedef struct _FONTINFO /* fi */
{
ULONG cjThis;
FLONG flCaps;
ULONG cGlyphsSupported;
ULONG cjMaxGlyph1;
ULONG cjMaxGlyph4;
ULONG cjMaxGlyph8;
ULONG cjMaxGlyph32;
} FONTINFO, *PFONTINFO;
ULONG APIENTRY FONTOBJ_cGetAllGlyphHandles(
FONTOBJ *pfo,
HGLYPH *phg
);
VOID APIENTRY FONTOBJ_vGetInfo(
FONTOBJ *pfo,
ULONG cjSize,
FONTINFO *pfi
);
ULONG APIENTRY FONTOBJ_cGetGlyphs(
FONTOBJ *pfo,
ULONG iMode,
ULONG cGlyph,
HGLYPH *phg,
PVOID *ppvGlyph
);
GAMMA_TABLES* APIENTRY FONTOBJ_pGetGammaTables(
FONTOBJ *pfo
);
XFORMOBJ * APIENTRY FONTOBJ_pxoGetXform(
FONTOBJ *pfo
);
IFIMETRICS * APIENTRY FONTOBJ_pifi(
FONTOBJ *pfo
);
FD_GLYPHSET * APIENTRY FONTOBJ_pfdg(
FONTOBJ *pfo
);
PVOID APIENTRY FONTOBJ_pvTrueTypeFontFile(
FONTOBJ *pfo,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -