PageRenderTime 71ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/binding/win32/wingdi.d

http://github.com/wilkie/djehuty
D | 5612 lines | 4450 code | 885 blank | 277 comment | 72 complexity | f3a6255c8f1fbd462b2ff68ba5d6885c MD5 | raw file
  1. /*
  2. * wingdi.d
  3. *
  4. * This module binds wingdi.h to D. The original copyright notice is
  5. * preserved below.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 24th, 2009
  9. *
  10. */
  11. module binding.win32.wingdi;
  12. import binding.win32.windef;
  13. import binding.win32.winnt;
  14. import binding.win32.winuser;
  15. import binding.c;
  16. extern(System):
  17. // The original copyright from WinGDI.h:
  18. /**************************************************************************
  19. * *
  20. * wingdi.h -- GDI procedure declarations, constant definitions and macros *
  21. * *
  22. * Copyright (c) Microsoft Corp. All rights reserved. *
  23. * *
  24. **************************************************************************/
  25. /* Binary raster ops */
  26. const auto R2_BLACK = 1; /* 0 */
  27. const auto R2_NOTMERGEPEN = 2; /* DPon */
  28. const auto R2_MASKNOTPEN = 3; /* DPna */
  29. const auto R2_NOTCOPYPEN = 4; /* PN */
  30. const auto R2_MASKPENNOT = 5; /* PDna */
  31. const auto R2_NOT = 6; /* Dn */
  32. const auto R2_XORPEN = 7; /* DPx */
  33. const auto R2_NOTMASKPEN = 8; /* DPan */
  34. const auto R2_MASKPEN = 9; /* DPa */
  35. const auto R2_NOTXORPEN = 10; /* DPxn */
  36. const auto R2_NOP = 11; /* D */
  37. const auto R2_MERGENOTPEN = 12; /* DPno */
  38. const auto R2_COPYPEN = 13; /* P */
  39. const auto R2_MERGEPENNOT = 14; /* PDno */
  40. const auto R2_MERGEPEN = 15; /* DPo */
  41. const auto R2_WHITE = 16; /* 1 */
  42. const auto R2_LAST = 16;
  43. /* Ternary raster operations */
  44. const auto SRCCOPY = cast(DWORD)0x00CC0020; /* dest = source */
  45. const auto SRCPAINT = cast(DWORD)0x00EE0086; /* dest = source OR dest */
  46. const auto SRCAND = cast(DWORD)0x008800C6; /* dest = source AND dest */
  47. const auto SRCINVERT = cast(DWORD)0x00660046; /* dest = source XOR dest */
  48. const auto SRCERASE = cast(DWORD)0x00440328; /* dest = source AND (NOT dest ) */
  49. const auto NOTSRCCOPY = cast(DWORD)0x00330008; /* dest = (NOT source) */
  50. const auto NOTSRCERASE = cast(DWORD)0x001100A6; /* dest = (NOT src) AND (NOT dest) */
  51. const auto MERGECOPY = cast(DWORD)0x00C000CA; /* dest = (source AND pattern) */
  52. const auto MERGEPAINT = cast(DWORD)0x00BB0226; /* dest = (NOT source) OR dest */
  53. const auto PATCOPY = cast(DWORD)0x00F00021; /* dest = pattern */
  54. const auto PATPAINT = cast(DWORD)0x00FB0A09; /* dest = DPSnoo */
  55. const auto PATINVERT = cast(DWORD)0x005A0049; /* dest = pattern XOR dest */
  56. const auto DSTINVERT = cast(DWORD)0x00550009; /* dest = (NOT dest) */
  57. const auto BLACKNESS = cast(DWORD)0x00000042; /* dest = BLACK */
  58. const auto WHITENESS = cast(DWORD)0x00FF0062; /* dest = WHITE */
  59. const auto NOMIRRORBITMAP = cast(DWORD)0x80000000; /* Do not Mirror the bitmap in this call */
  60. const auto CAPTUREBLT = cast(DWORD)0x40000000; /* Include layered windows */
  61. /* Quaternary raster codes */
  62. template MAKEROP4(uint fore, uint back) {
  63. const uint MAKEROP4 = cast(uint)((((back) << 8) & 0xFF000000) | (fore));
  64. }
  65. const auto GDI_ERROR = (0xFFFFFFFFL);
  66. const auto HGDI_ERROR = cast(HANDLE)(-1);
  67. /* Region Flags */
  68. const auto ERROR = 0;
  69. const auto NULLREGION = 1;
  70. const auto SIMPLEREGION = 2;
  71. const auto COMPLEXREGION = 3;
  72. const auto RGN_ERROR = ERROR;
  73. /* CombineRgn() Styles */
  74. const auto RGN_AND = 1;
  75. const auto RGN_OR = 2;
  76. const auto RGN_XOR = 3;
  77. const auto RGN_DIFF = 4;
  78. const auto RGN_COPY = 5;
  79. const auto RGN_MIN = RGN_AND;
  80. const auto RGN_MAX = RGN_COPY;
  81. /* StretchBlt() Modes */
  82. const auto BLACKONWHITE = 1;
  83. const auto WHITEONBLACK = 2;
  84. const auto COLORONCOLOR = 3;
  85. const auto HALFTONE = 4;
  86. const auto MAXSTRETCHBLTMODE = 4;
  87. /* New StretchBlt() Modes */
  88. const auto STRETCH_ANDSCANS = BLACKONWHITE;
  89. const auto STRETCH_ORSCANS = WHITEONBLACK;
  90. const auto STRETCH_DELETESCANS = COLORONCOLOR;
  91. const auto STRETCH_HALFTONE = HALFTONE;
  92. /* PolyFill() Modes */
  93. const auto ALTERNATE = 1;
  94. const auto WINDING = 2;
  95. const auto POLYFILL_LAST = 2;
  96. /* Layout Orientation Options */
  97. const auto LAYOUT_RTL = 0x00000001; // Right to left
  98. const auto LAYOUT_BTT = 0x00000002; // Bottom to top
  99. const auto LAYOUT_VBH = 0x00000004; // Vertical before horizontal
  100. const auto LAYOUT_ORIENTATIONMASK = (LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH);
  101. const auto LAYOUT_BITMAPORIENTATIONPRESERVED = 0x00000008;
  102. /* Text Alignment Options */
  103. const auto TA_NOUPDATECP = 0;
  104. const auto TA_UPDATECP = 1;
  105. const auto TA_LEFT = 0;
  106. const auto TA_RIGHT = 2;
  107. const auto TA_CENTER = 6;
  108. const auto TA_TOP = 0;
  109. const auto TA_BOTTOM = 8;
  110. const auto TA_BASELINE = 24;
  111. const auto TA_RTLREADING = 256;
  112. const auto TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING);
  113. const auto VTA_BASELINE = TA_BASELINE;
  114. const auto VTA_LEFT = TA_BOTTOM;
  115. const auto VTA_RIGHT = TA_TOP;
  116. const auto VTA_CENTER = TA_CENTER;
  117. const auto VTA_BOTTOM = TA_RIGHT;
  118. const auto VTA_TOP = TA_LEFT;
  119. const auto ETO_OPAQUE = 0x0002;
  120. const auto ETO_CLIPPED = 0x0004;
  121. const auto ETO_GLYPH_INDEX = 0x0010;
  122. const auto ETO_RTLREADING = 0x0080;
  123. const auto ETO_NUMERICSLOCAL = 0x0400;
  124. const auto ETO_NUMERICSLATIN = 0x0800;
  125. const auto ETO_IGNORELANGUAGE = 0x1000;
  126. const auto ETO_PDY = 0x2000;
  127. const auto ETO_REVERSE_INDEX_MAP = 0x10000;
  128. const auto ASPECT_FILTERING = 0x0001;
  129. /* Bounds Accumulation APIs */
  130. const auto DCB_RESET = 0x0001;
  131. const auto DCB_ACCUMULATE = 0x0002;
  132. const auto DCB_DIRTY = DCB_ACCUMULATE;
  133. const auto DCB_SET = (DCB_RESET | DCB_ACCUMULATE);
  134. const auto DCB_ENABLE = 0x0004;
  135. const auto DCB_DISABLE = 0x0008;
  136. /* Metafile Functions */
  137. const auto META_SETBKCOLOR = 0x0201;
  138. const auto META_SETBKMODE = 0x0102;
  139. const auto META_SETMAPMODE = 0x0103;
  140. const auto META_SETROP2 = 0x0104;
  141. const auto META_SETRELABS = 0x0105;
  142. const auto META_SETPOLYFILLMODE = 0x0106;
  143. const auto META_SETSTRETCHBLTMODE = 0x0107;
  144. const auto META_SETTEXTCHAREXTRA = 0x0108;
  145. const auto META_SETTEXTCOLOR = 0x0209;
  146. const auto META_SETTEXTJUSTIFICATION = 0x020A;
  147. const auto META_SETWINDOWORG = 0x020B;
  148. const auto META_SETWINDOWEXT = 0x020C;
  149. const auto META_SETVIEWPORTORG = 0x020D;
  150. const auto META_SETVIEWPORTEXT = 0x020E;
  151. const auto META_OFFSETWINDOWORG = 0x020F;
  152. const auto META_SCALEWINDOWEXT = 0x0410;
  153. const auto META_OFFSETVIEWPORTORG = 0x0211;
  154. const auto META_SCALEVIEWPORTEXT = 0x0412;
  155. const auto META_LINETO = 0x0213;
  156. const auto META_MOVETO = 0x0214;
  157. const auto META_EXCLUDECLIPRECT = 0x0415;
  158. const auto META_INTERSECTCLIPRECT = 0x0416;
  159. const auto META_ARC = 0x0817;
  160. const auto META_ELLIPSE = 0x0418;
  161. const auto META_FLOODFILL = 0x0419;
  162. const auto META_PIE = 0x081A;
  163. const auto META_RECTANGLE = 0x041B;
  164. const auto META_ROUNDRECT = 0x061C;
  165. const auto META_PATBLT = 0x061D;
  166. const auto META_SAVEDC = 0x001E;
  167. const auto META_SETPIXEL = 0x041F;
  168. const auto META_OFFSETCLIPRGN = 0x0220;
  169. const auto META_TEXTOUT = 0x0521;
  170. const auto META_BITBLT = 0x0922;
  171. const auto META_STRETCHBLT = 0x0B23;
  172. const auto META_POLYGON = 0x0324;
  173. const auto META_POLYLINE = 0x0325;
  174. const auto META_ESCAPE = 0x0626;
  175. const auto META_RESTOREDC = 0x0127;
  176. const auto META_FILLREGION = 0x0228;
  177. const auto META_FRAMEREGION = 0x0429;
  178. const auto META_INVERTREGION = 0x012A;
  179. const auto META_PAINTREGION = 0x012B;
  180. const auto META_SELECTCLIPREGION = 0x012C;
  181. const auto META_SELECTOBJECT = 0x012D;
  182. const auto META_SETTEXTALIGN = 0x012E;
  183. const auto META_CHORD = 0x0830;
  184. const auto META_SETMAPPERFLAGS = 0x0231;
  185. const auto META_EXTTEXTOUT = 0x0a32;
  186. const auto META_SETDIBTODEV = 0x0d33;
  187. const auto META_SELECTPALETTE = 0x0234;
  188. const auto META_REALIZEPALETTE = 0x0035;
  189. const auto META_ANIMATEPALETTE = 0x0436;
  190. const auto META_SETPALENTRIES = 0x0037;
  191. const auto META_POLYPOLYGON = 0x0538;
  192. const auto META_RESIZEPALETTE = 0x0139;
  193. const auto META_DIBBITBLT = 0x0940;
  194. const auto META_DIBSTRETCHBLT = 0x0b41;
  195. const auto META_DIBCREATEPATTERNBRUSH = 0x0142;
  196. const auto META_STRETCHDIB = 0x0f43;
  197. const auto META_EXTFLOODFILL = 0x0548;
  198. const auto META_SETLAYOUT = 0x0149;
  199. const auto META_DELETEOBJECT = 0x01f0;
  200. const auto META_CREATEPALETTE = 0x00f7;
  201. const auto META_CREATEPATTERNBRUSH = 0x01F9;
  202. const auto META_CREATEPENINDIRECT = 0x02FA;
  203. const auto META_CREATEFONTINDIRECT = 0x02FB;
  204. const auto META_CREATEBRUSHINDIRECT = 0x02FC;
  205. const auto META_CREATEREGION = 0x06FF;
  206. struct DRAWPATRECT {
  207. POINT ptPosition;
  208. POINT ptSize;
  209. WORD wStyle;
  210. WORD wPattern;
  211. }
  212. typedef DRAWPATRECT* PDRAWPATRECT;
  213. /* GDI Escapes */
  214. const auto NEWFRAME = 1;
  215. const auto ABORTDOC = 2;
  216. const auto NEXTBAND = 3;
  217. const auto SETCOLORTABLE = 4;
  218. const auto GETCOLORTABLE = 5;
  219. const auto FLUSHOUTPUT = 6;
  220. const auto DRAFTMODE = 7;
  221. const auto QUERYESCSUPPORT = 8;
  222. const auto SETABORTPROC = 9;
  223. const auto STARTDOC = 10;
  224. const auto ENDDOC = 11;
  225. const auto GETPHYSPAGESIZE = 12;
  226. const auto GETPRINTINGOFFSET = 13;
  227. const auto GETSCALINGFACTOR = 14;
  228. const auto MFCOMMENT = 15;
  229. const auto GETPENWIDTH = 16;
  230. const auto SETCOPYCOUNT = 17;
  231. const auto SELECTPAPERSOURCE = 18;
  232. const auto DEVICEDATA = 19;
  233. const auto PASSTHROUGH = 19;
  234. const auto GETTECHNOLGY = 20;
  235. const auto GETTECHNOLOGY = 20;
  236. const auto SETLINECAP = 21;
  237. const auto SETLINEJOIN = 22;
  238. const auto SETMITERLIMIT = 23;
  239. const auto BANDINFO = 24;
  240. const auto DRAWPATTERNRECT = 25;
  241. const auto GETVECTORPENSIZE = 26;
  242. const auto GETVECTORBRUSHSIZE = 27;
  243. const auto ENABLEDUPLEX = 28;
  244. const auto GETSETPAPERBINS = 29;
  245. const auto GETSETPRINTORIENT = 30;
  246. const auto ENUMPAPERBINS = 31;
  247. const auto SETDIBSCALING = 32;
  248. const auto EPSPRINTING = 33;
  249. const auto ENUMPAPERMETRICS = 34;
  250. const auto GETSETPAPERMETRICS = 35;
  251. const auto POSTSCRIPT_DATA = 37;
  252. const auto POSTSCRIPT_IGNORE = 38;
  253. const auto MOUSETRAILS = 39;
  254. const auto GETDEVICEUNITS = 42;
  255. const auto GETEXTENDEDTEXTMETRICS = 256;
  256. const auto GETEXTENTTABLE = 257;
  257. const auto GETPAIRKERNTABLE = 258;
  258. const auto GETTRACKKERNTABLE = 259;
  259. const auto EXTTEXTOUT = 512;
  260. const auto GETFACENAME = 513;
  261. const auto DOWNLOADFACE = 514;
  262. const auto ENABLERELATIVEWIDTHS = 768;
  263. const auto ENABLEPAIRKERNING = 769;
  264. const auto SETKERNTRACK = 770;
  265. const auto SETALLJUSTVALUES = 771;
  266. const auto SETCHARSET = 772;
  267. const auto STRETCHBLT = 2048;
  268. const auto METAFILE_DRIVER = 2049;
  269. const auto GETSETSCREENPARAMS = 3072;
  270. const auto QUERYDIBSUPPORT = 3073;
  271. const auto BEGIN_PATH = 4096;
  272. const auto CLIP_TO_PATH = 4097;
  273. const auto END_PATH = 4098;
  274. const auto EXT_DEVICE_CAPS = 4099;
  275. const auto RESTORE_CTM = 4100;
  276. const auto SAVE_CTM = 4101;
  277. const auto SET_ARC_DIRECTION = 4102;
  278. const auto SET_BACKGROUND_COLOR = 4103;
  279. const auto SET_POLY_MODE = 4104;
  280. const auto SET_SCREEN_ANGLE = 4105;
  281. const auto SET_SPREAD = 4106;
  282. const auto TRANSFORM_CTM = 4107;
  283. const auto SET_CLIP_BOX = 4108;
  284. const auto SET_BOUNDS = 4109;
  285. const auto SET_MIRROR_MODE = 4110;
  286. const auto OPENCHANNEL = 4110;
  287. const auto DOWNLOADHEADER = 4111;
  288. const auto CLOSECHANNEL = 4112;
  289. const auto POSTSCRIPT_PASSTHROUGH = 4115;
  290. const auto ENCAPSULATED_POSTSCRIPT = 4116;
  291. const auto POSTSCRIPT_IDENTIFY = 4117; /* new escape for NT5 pscript driver */
  292. const auto POSTSCRIPT_INJECTION = 4118; /* new escape for NT5 pscript driver */
  293. const auto CHECKJPEGFORMAT = 4119;
  294. const auto CHECKPNGFORMAT = 4120;
  295. const auto GET_PS_FEATURESETTING = 4121; /* new escape for NT5 pscript driver */
  296. const auto GDIPLUS_TS_QUERYVER = 4122; /* private escape */
  297. const auto GDIPLUS_TS_RECORD = 4123; /* private escape */
  298. /*
  299. * Return Values for MILCORE_TS_QUERYVER
  300. */
  301. const auto MILCORE_TS_QUERYVER_RESULT_FALSE = 0x0;
  302. const auto MILCORE_TS_QUERYVER_RESULT_TRUE = 0x7FFFFFFF;
  303. const auto SPCLPASSTHROUGH2 = 4568; /* new escape for NT5 pscript driver */
  304. /*
  305. * Parameters for POSTSCRIPT_IDENTIFY escape
  306. */
  307. const auto PSIDENT_GDICENTRIC = 0;
  308. const auto PSIDENT_PSCENTRIC = 1;
  309. /*
  310. * Header structure for the input buffer to POSTSCRIPT_INJECTION escape
  311. */
  312. struct PSINJECTDATA {
  313. DWORD DataBytes; /* number of raw data bytes (NOT including this header) */
  314. WORD InjectionPoint; /* injection point */
  315. WORD PageNumber; /* page number to apply the injection */
  316. /* Followed by raw data to be injected */
  317. }
  318. typedef PSINJECTDATA* PPSINJECTDATA;
  319. /*
  320. * Constants for PSINJECTDATA.InjectionPoint field
  321. */
  322. const auto PSINJECT_BEGINSTREAM = 1;
  323. const auto PSINJECT_PSADOBE = 2;
  324. const auto PSINJECT_PAGESATEND = 3;
  325. const auto PSINJECT_PAGES = 4;
  326. const auto PSINJECT_DOCNEEDEDRES = 5;
  327. const auto PSINJECT_DOCSUPPLIEDRES = 6;
  328. const auto PSINJECT_PAGEORDER = 7;
  329. const auto PSINJECT_ORIENTATION = 8;
  330. const auto PSINJECT_BOUNDINGBOX = 9;
  331. const auto PSINJECT_DOCUMENTPROCESSCOLORS = 10;
  332. const auto PSINJECT_COMMENTS = 11;
  333. const auto PSINJECT_BEGINDEFAULTS = 12;
  334. const auto PSINJECT_ENDDEFAULTS = 13;
  335. const auto PSINJECT_BEGINPROLOG = 14;
  336. const auto PSINJECT_ENDPROLOG = 15;
  337. const auto PSINJECT_BEGINSETUP = 16;
  338. const auto PSINJECT_ENDSETUP = 17;
  339. const auto PSINJECT_TRAILER = 18;
  340. const auto PSINJECT_EOF = 19;
  341. const auto PSINJECT_ENDSTREAM = 20;
  342. const auto PSINJECT_DOCUMENTPROCESSCOLORSATEND = 21;
  343. const auto PSINJECT_PAGENUMBER = 100;
  344. const auto PSINJECT_BEGINPAGESETUP = 101;
  345. const auto PSINJECT_ENDPAGESETUP = 102;
  346. const auto PSINJECT_PAGETRAILER = 103;
  347. const auto PSINJECT_PLATECOLOR = 104;
  348. const auto PSINJECT_SHOWPAGE = 105;
  349. const auto PSINJECT_PAGEBBOX = 106;
  350. const auto PSINJECT_ENDPAGECOMMENTS = 107;
  351. const auto PSINJECT_VMSAVE = 200;
  352. const auto PSINJECT_VMRESTORE = 201;
  353. /*
  354. * Parameter for GET_PS_FEATURESETTING escape
  355. */
  356. const auto FEATURESETTING_NUP = 0;
  357. const auto FEATURESETTING_OUTPUT = 1;
  358. const auto FEATURESETTING_PSLEVEL = 2;
  359. const auto FEATURESETTING_CUSTPAPER = 3;
  360. const auto FEATURESETTING_MIRROR = 4;
  361. const auto FEATURESETTING_NEGATIVE = 5;
  362. const auto FEATURESETTING_PROTOCOL = 6;
  363. //
  364. // The range of selectors between FEATURESETTING_PRIVATE_BEGIN and
  365. // FEATURESETTING_PRIVATE_END is reserved by Microsoft for private use
  366. //
  367. const auto FEATURESETTING_PRIVATE_BEGIN = 0x1000;
  368. const auto FEATURESETTING_PRIVATE_END = 0x1FFF;
  369. /*
  370. * Information about output options
  371. */
  372. struct PSFEATURE_OUTPUT {
  373. BOOL bPageIndependent;
  374. BOOL bSetPageDevice;
  375. }
  376. typedef PSFEATURE_OUTPUT* PPSFEATURE_OUTPUT;
  377. /*
  378. * Information about custom paper size
  379. */
  380. struct PSFEATURE_CUSTPAPER {
  381. LONG lOrientation;
  382. LONG lWidth;
  383. LONG lHeight;
  384. LONG lWidthOffset;
  385. LONG lHeightOffset;
  386. }
  387. typedef PSFEATURE_CUSTPAPER* PPSFEATURE_CUSTPAPER;
  388. /* Value returned for FEATURESETTING_PROTOCOL */
  389. const auto PSPROTOCOL_ASCII = 0;
  390. const auto PSPROTOCOL_BCP = 1;
  391. const auto PSPROTOCOL_TBCP = 2;
  392. const auto PSPROTOCOL_BINARY = 3;
  393. /* Flag returned from QUERYDIBSUPPORT */
  394. const auto QDI_SETDIBITS = 1;
  395. const auto QDI_GETDIBITS = 2;
  396. const auto QDI_DIBTOSCREEN = 4;
  397. const auto QDI_STRETCHDIB = 8;
  398. /* Spooler Error Codes */
  399. const auto SP_NOTREPORTED = 0x4000;
  400. const auto SP_ERROR = (-1);
  401. const auto SP_APPABORT = (-2);
  402. const auto SP_USERABORT = (-3);
  403. const auto SP_OUTOFDISK = (-4);
  404. const auto SP_OUTOFMEMORY = (-5);
  405. const auto PR_JOBSTATUS = 0x0000;
  406. /* Object Definitions for EnumObjects() */
  407. const auto OBJ_PEN = 1;
  408. const auto OBJ_BRUSH = 2;
  409. const auto OBJ_DC = 3;
  410. const auto OBJ_METADC = 4;
  411. const auto OBJ_PAL = 5;
  412. const auto OBJ_FONT = 6;
  413. const auto OBJ_BITMAP = 7;
  414. const auto OBJ_REGION = 8;
  415. const auto OBJ_METAFILE = 9;
  416. const auto OBJ_MEMDC = 10;
  417. const auto OBJ_EXTPEN = 11;
  418. const auto OBJ_ENHMETADC = 12;
  419. const auto OBJ_ENHMETAFILE = 13;
  420. const auto OBJ_COLORSPACE = 14;
  421. const auto GDI_OBJ_LAST = OBJ_COLORSPACE;
  422. /* xform stuff */
  423. const auto MWT_IDENTITY = 1;
  424. const auto MWT_LEFTMULTIPLY = 2;
  425. const auto MWT_RIGHTMULTIPLY = 3;
  426. const auto MWT_MIN = MWT_IDENTITY;
  427. const auto MWT_MAX = MWT_RIGHTMULTIPLY;
  428. const auto _XFORM_ = 0;
  429. struct XFORM {
  430. FLOAT eM11;
  431. FLOAT eM12;
  432. FLOAT eM21;
  433. FLOAT eM22;
  434. FLOAT eDx;
  435. FLOAT eDy;
  436. }
  437. typedef XFORM* PXFORM;
  438. typedef XFORM* LPXFORM;
  439. /* Bitmap Header Definition */
  440. struct BITMAP {
  441. LONG bmType;
  442. LONG bmWidth;
  443. LONG bmHeight;
  444. LONG bmWidthBytes;
  445. WORD bmPlanes;
  446. WORD bmBitsPixel;
  447. LPVOID bmBits;
  448. }
  449. typedef BITMAP* PBITMAP;
  450. typedef BITMAP* NPBITMAP;
  451. typedef BITMAP* LPBITMAP;
  452. align(1) struct RGBTRIPLE {
  453. BYTE rgbtBlue;
  454. BYTE rgbtGreen;
  455. BYTE rgbtRed;
  456. }
  457. typedef RGBTRIPLE* PRGBTRIPLE;
  458. typedef RGBTRIPLE* NPRGBTRIPLE;
  459. typedef RGBTRIPLE* LPRGBTRIPLE;
  460. struct RGBQUAD {
  461. BYTE rgbBlue;
  462. BYTE rgbGreen;
  463. BYTE rgbRed;
  464. BYTE rgbReserved;
  465. }
  466. typedef RGBQUAD* LPRGBQUAD;
  467. /* Image Color Matching color definitions */
  468. const auto CS_ENABLE = 0x00000001;
  469. const auto CS_DISABLE = 0x00000002;
  470. const auto CS_DELETE_TRANSFORM = 0x00000003;
  471. /* Logcolorspace signature */
  472. const auto LCS_SIGNATURE = "PSOC"c;
  473. /* Logcolorspace lcsType values */
  474. const auto LCS_sRGB = "sRGB"c;
  475. const auto LCS_WINDOWS_COLOR_SPACE = "Win "c; // Windows default color space
  476. typedef LONG LCSCSTYPE;
  477. const auto LCS_CALIBRATED_RGB = 0x00000000;
  478. typedef LONG LCSGAMUTMATCH;
  479. const auto LCS_GM_BUSINESS = 0x00000001;
  480. const auto LCS_GM_GRAPHICS = 0x00000002;
  481. const auto LCS_GM_IMAGES = 0x00000004;
  482. const auto LCS_GM_ABS_COLORIMETRIC = 0x00000008;
  483. /* ICM Defines for results from CheckColorInGamut() */
  484. const auto CM_OUT_OF_GAMUT = 255;
  485. const auto CM_IN_GAMUT = 0;
  486. /* UpdateICMRegKey Constants */
  487. const auto ICM_ADDPROFILE = 1;
  488. const auto ICM_DELETEPROFILE = 2;
  489. const auto ICM_QUERYPROFILE = 3;
  490. const auto ICM_SETDEFAULTPROFILE = 4;
  491. const auto ICM_REGISTERICMATCHER = 5;
  492. const auto ICM_UNREGISTERICMATCHER = 6;
  493. const auto ICM_QUERYMATCH = 7;
  494. /* Macros to retrieve CMYK values from a COLORREF */
  495. template GetKValue(COLORREF cmyk) {
  496. const BYTE GetKValue = cast(BYTE)(cmyk);
  497. }
  498. template GetYValue(COLORREF cmyk) {
  499. const BYTE GetYValue = cast(BYTE)(cmyk >> 8);
  500. }
  501. template GetYValue(COLORREF cmyk) {
  502. const BYTE GetMValue = cast(BYTE)(cmyk >> 16);
  503. }
  504. template GetYValue(COLORREF cmyk) {
  505. const BYTE GetCValue = cast(BYTE)(cmyk >> 24);
  506. }
  507. template CMYK(BYTE c, BYTE m, BYTE y, BYTE k) {
  508. const COLORREF CMYK = cast(COLORREF)(cast(uint)k | (cast(uint)y) << 8 | (cast(uint)m) << 16 | (cast(uint)c) << 24);
  509. }
  510. typedef Clong_t FXPT16DOT16;
  511. typedef Clong_t* LPFXPT16DOT16;
  512. typedef Clong_t FXPT2DOT30;
  513. typedef Clong_t* LPFXPT2DOT30;
  514. /* ICM Color Definitions */
  515. // The following two structures are used for defining RGB's in terms of CIEXYZ.
  516. struct CIEXYZ {
  517. FXPT2DOT30 ciexyzX;
  518. FXPT2DOT30 ciexyzY;
  519. FXPT2DOT30 ciexyzZ;
  520. }
  521. typedef CIEXYZ* LPCIEXYZ;
  522. struct CIEXYZTRIPLE {
  523. CIEXYZ ciexyzRed;
  524. CIEXYZ ciexyzGreen;
  525. CIEXYZ ciexyzBlue;
  526. }
  527. typedef CIEXYZTRIPLE* LPCIEXYZTRIPLE;
  528. // The next structures the logical color space. Unlike pens and brushes,
  529. // but like palettes, there is only one way to create a LogColorSpace.
  530. // A pointer to it must be passed, its elements can't be pushed as
  531. // arguments.
  532. struct LOGCOLORSPACEA {
  533. DWORD lcsSignature;
  534. DWORD lcsVersion;
  535. DWORD lcsSize;
  536. LCSCSTYPE lcsCSType;
  537. LCSGAMUTMATCH lcsIntent;
  538. CIEXYZTRIPLE lcsEndpoints;
  539. DWORD lcsGammaRed;
  540. DWORD lcsGammaGreen;
  541. DWORD lcsGammaBlue;
  542. CHAR lcsFilename[MAX_PATH];
  543. }
  544. typedef LOGCOLORSPACEA* LPLOGCOLORSPACEA;
  545. struct LOGCOLORSPACEW {
  546. DWORD lcsSignature;
  547. DWORD lcsVersion;
  548. DWORD lcsSize;
  549. LCSCSTYPE lcsCSType;
  550. LCSGAMUTMATCH lcsIntent;
  551. CIEXYZTRIPLE lcsEndpoints;
  552. DWORD lcsGammaRed;
  553. DWORD lcsGammaGreen;
  554. DWORD lcsGammaBlue;
  555. WCHAR lcsFilename[MAX_PATH];
  556. }
  557. typedef LOGCOLORSPACEW* LPLOGCOLORSPACEW;
  558. version(UNICODE) {
  559. typedef LOGCOLORSPACEW LOGCOLORSPACE;
  560. typedef LPLOGCOLORSPACEW LPLOGCOLORSPACE;
  561. }
  562. else {
  563. typedef LOGCOLORSPACEA LOGCOLORSPACE;
  564. typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
  565. }
  566. /* structures for defining DIBs */
  567. struct BITMAPCOREHEADER {
  568. DWORD bcSize; /* used to get to color table */
  569. WORD bcWidth;
  570. WORD bcHeight;
  571. WORD bcPlanes;
  572. WORD bcBitCount;
  573. }
  574. typedef BITMAPCOREHEADER* LPBITMAPCOREHEADER;
  575. typedef BITMAPCOREHEADER* PBITMAPCOREHEADER;
  576. struct BITMAPINFOHEADER{
  577. DWORD biSize;
  578. LONG biWidth;
  579. LONG biHeight;
  580. WORD biPlanes;
  581. WORD biBitCount;
  582. DWORD biCompression;
  583. DWORD biSizeImage;
  584. LONG biXPelsPerMeter;
  585. LONG biYPelsPerMeter;
  586. DWORD biClrUsed;
  587. DWORD biClrImportant;
  588. }
  589. typedef BITMAPINFOHEADER* LPBITMAPINFOHEADER;
  590. typedef BITMAPINFOHEADER* PBITMAPINFOHEADER;
  591. struct BITMAPV4HEADER {
  592. DWORD bV4Size;
  593. LONG bV4Width;
  594. LONG bV4Height;
  595. WORD bV4Planes;
  596. WORD bV4BitCount;
  597. DWORD bV4V4Compression;
  598. DWORD bV4SizeImage;
  599. LONG bV4XPelsPerMeter;
  600. LONG bV4YPelsPerMeter;
  601. DWORD bV4ClrUsed;
  602. DWORD bV4ClrImportant;
  603. DWORD bV4RedMask;
  604. DWORD bV4GreenMask;
  605. DWORD bV4BlueMask;
  606. DWORD bV4AlphaMask;
  607. DWORD bV4CSType;
  608. CIEXYZTRIPLE bV4Endpoints;
  609. DWORD bV4GammaRed;
  610. DWORD bV4GammaGreen;
  611. DWORD bV4GammaBlue;
  612. }
  613. typedef BITMAPV4HEADER* LPBITMAPV4HEADER;
  614. typedef BITMAPV4HEADER* PBITMAPV4HEADER;
  615. struct BITMAPV5HEADER {
  616. DWORD bV5Size;
  617. LONG bV5Width;
  618. LONG bV5Height;
  619. WORD bV5Planes;
  620. WORD bV5BitCount;
  621. DWORD bV5Compression;
  622. DWORD bV5SizeImage;
  623. LONG bV5XPelsPerMeter;
  624. LONG bV5YPelsPerMeter;
  625. DWORD bV5ClrUsed;
  626. DWORD bV5ClrImportant;
  627. DWORD bV5RedMask;
  628. DWORD bV5GreenMask;
  629. DWORD bV5BlueMask;
  630. DWORD bV5AlphaMask;
  631. DWORD bV5CSType;
  632. CIEXYZTRIPLE bV5Endpoints;
  633. DWORD bV5GammaRed;
  634. DWORD bV5GammaGreen;
  635. DWORD bV5GammaBlue;
  636. DWORD bV5Intent;
  637. DWORD bV5ProfileData;
  638. DWORD bV5ProfileSize;
  639. DWORD bV5Reserved;
  640. }
  641. typedef BITMAPV5HEADER* LPBITMAPV5HEADER;
  642. typedef BITMAPV5HEADER* PBITMAPV5HEADER;
  643. // Values for bV5CSType
  644. const auto PROFILE_LINKED = "LINK"c;
  645. const auto PROFILE_EMBEDDED = "MBED"c;
  646. /* constants for the biCompression field */
  647. const auto BI_RGB = 0;
  648. const auto BI_RLE8 = 1;
  649. const auto BI_RLE4 = 2;
  650. const auto BI_BITFIELDS = 3;
  651. const auto BI_JPEG = 4;
  652. const auto BI_PNG = 5;
  653. struct BITMAPINFO {
  654. BITMAPINFOHEADER bmiHeader;
  655. RGBQUAD bmiColors[1];
  656. }
  657. typedef BITMAPINFO* LPBITMAPINFO;
  658. typedef BITMAPINFO* PBITMAPINFO;
  659. struct BITMAPCOREINFO {
  660. BITMAPCOREHEADER bmciHeader;
  661. RGBTRIPLE bmciColors[1];
  662. }
  663. typedef BITMAPCOREINFO* LPBITMAPCOREINFO;
  664. typedef BITMAPCOREINFO* PBITMAPCOREINFO;
  665. align(2) struct BITMAPFILEHEADER {
  666. WORD bfType;
  667. DWORD bfSize;
  668. WORD bfReserved1;
  669. WORD bfReserved2;
  670. DWORD bfOffBits;
  671. }
  672. typedef BITMAPFILEHEADER* LPBITMAPFILEHEADER;
  673. typedef BITMAPFILEHEADER* PBITMAPFILEHEADER;
  674. POINTS* MAKEPOINTS(ref DWORD val) {
  675. return cast(POINTS*)(&val);
  676. }
  677. struct FONTSIGNATURE {
  678. DWORD fsUsb[4];
  679. DWORD fsCsb[2];
  680. }
  681. typedef FONTSIGNATURE* LPFONTSIGNATURE;
  682. typedef FONTSIGNATURE* PFONTSIGNATURE;
  683. struct CHARSETINFO {
  684. UINT ciCharset;
  685. UINT ciACP;
  686. FONTSIGNATURE fs;
  687. }
  688. typedef CHARSETINFO* NPCHARSETINFO;
  689. typedef CHARSETINFO* LPCHARSETINFO;
  690. typedef CHARSETINFO* PCHARSETINFO;
  691. const auto TCI_SRCCHARSET = 1;
  692. const auto TCI_SRCCODEPAGE = 2;
  693. const auto TCI_SRCFONTSIG = 3;
  694. const auto TCI_SRCLOCALE = 0x1000;
  695. struct LOCALESIGNATURE {
  696. DWORD lsUsb[4];
  697. DWORD lsCsbDefault[2];
  698. DWORD lsCsbSupported[2];
  699. }
  700. typedef LOCALESIGNATURE* LPLOCALESIGNATURE;
  701. typedef LOCALESIGNATURE* PLOCALESIGNATURE;
  702. /* Clipboard Metafile Picture Structure */
  703. struct HANDLETABLE {
  704. HGDIOBJ objectHandle[1];
  705. }
  706. typedef HANDLETABLE* PHANDLETABLE;
  707. typedef HANDLETABLE* LPHANDLETABLE;
  708. struct METARECORD {
  709. DWORD rdSize;
  710. WORD rdFunction;
  711. WORD rdParm[1];
  712. }
  713. typedef METARECORD* PMETARECORD;
  714. typedef METARECORD* LPMETARECORD;
  715. struct METAFILEPICT {
  716. LONG mm;
  717. LONG xExt;
  718. LONG yExt;
  719. HMETAFILE hMF;
  720. }
  721. typedef METAFILEPICT* LPMETAFILEPICT;
  722. align(2) struct METAHEADER {
  723. WORD mtType;
  724. WORD mtHeaderSize;
  725. WORD mtVersion;
  726. DWORD mtSize;
  727. WORD mtNoObjects;
  728. DWORD mtMaxRecord;
  729. WORD mtNoParameters;
  730. }
  731. typedef METAHEADER* PMETAHEADER;
  732. typedef METAHEADER* LPMETAHEADER;
  733. /* Enhanced Metafile structures */
  734. struct ENHMETARECORD {
  735. DWORD iType; // Record type EMR_XXX
  736. DWORD nSize; // Record size in bytes
  737. DWORD dParm[1]; // Parameters
  738. }
  739. typedef ENHMETARECORD* PENHMETARECORD;
  740. typedef ENHMETARECORD* LPENHMETARECORD;
  741. struct ENHMETAHEADER {
  742. DWORD iType; // Record typeEMR_HEADER
  743. DWORD nSize; // Record size in bytes. This may be greater
  744. // than the sizeof(ENHMETAHEADER).
  745. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  746. RECTL rclFrame; // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  747. DWORD dSignature; // Signature. Must be ENHMETA_SIGNATURE.
  748. DWORD nVersion; // Version number
  749. DWORD nBytes; // Size of the metafile in bytes
  750. DWORD nRecords; // Number of records in the metafile
  751. WORD nHandles; // Number of handles in the handle table
  752. // Handle index zero is reserved.
  753. WORD sReserved; // Reserved. Must be zero.
  754. DWORD nDescription; // Number of chars in the unicode description string
  755. // This is 0 if there is no description string
  756. DWORD offDescription; // Offset to the metafile description record.
  757. // This is 0 if there is no description string
  758. DWORD nPalEntries; // Number of entries in the metafile palette.
  759. SIZEL szlDevice; // Size of the reference device in pels
  760. SIZEL szlMillimeters; // Size of the reference device in millimeters
  761. DWORD cbPixelFormat; // Size of PIXELFORMATDESCRIPTOR information
  762. // This is 0 if no pixel format is set
  763. DWORD offPixelFormat; // Offset to PIXELFORMATDESCRIPTOR
  764. // This is 0 if no pixel format is set
  765. DWORD bOpenGL; // TRUE if OpenGL commands are present in
  766. // the metafile, otherwise FALSE
  767. SIZEL szlMicrometers; // Size of the reference device in micrometers
  768. }
  769. typedef ENHMETAHEADER* PENHMETAHEADER;
  770. typedef ENHMETAHEADER* LPENHMETAHEADER;
  771. /* tmPitchAndFamily flags */
  772. const auto TMPF_FIXED_PITCH = 0x01;
  773. const auto TMPF_VECTOR = 0x02;
  774. const auto TMPF_DEVICE = 0x08;
  775. const auto TMPF_TRUETYPE = 0x04;
  776. //
  777. // BCHAR definition for APPs
  778. //
  779. version(UNICODE) {
  780. typedef WCHAR BCHAR;
  781. }
  782. else {
  783. typedef BYTE BCHAR;
  784. }
  785. align(4) struct TEXTMETRICA {
  786. LONG tmHeight;
  787. LONG tmAscent;
  788. LONG tmDescent;
  789. LONG tmInternalLeading;
  790. LONG tmExternalLeading;
  791. LONG tmAveCharWidth;
  792. LONG tmMaxCharWidth;
  793. LONG tmWeight;
  794. LONG tmOverhang;
  795. LONG tmDigitizedAspectX;
  796. LONG tmDigitizedAspectY;
  797. BYTE tmFirstChar;
  798. BYTE tmLastChar;
  799. BYTE tmDefaultChar;
  800. BYTE tmBreakChar;
  801. BYTE tmItalic;
  802. BYTE tmUnderlined;
  803. BYTE tmStruckOut;
  804. BYTE tmPitchAndFamily;
  805. BYTE tmCharSet;
  806. }
  807. typedef TEXTMETRICA* PTEXTMETRICA;
  808. typedef TEXTMETRICA* NPTEXTMETRICA;
  809. typedef TEXTMETRICA* LPTEXTMETRICA;
  810. align(4) struct TEXTMETRICW {
  811. LONG tmHeight;
  812. LONG tmAscent;
  813. LONG tmDescent;
  814. LONG tmInternalLeading;
  815. LONG tmExternalLeading;
  816. LONG tmAveCharWidth;
  817. LONG tmMaxCharWidth;
  818. LONG tmWeight;
  819. LONG tmOverhang;
  820. LONG tmDigitizedAspectX;
  821. LONG tmDigitizedAspectY;
  822. WCHAR tmFirstChar;
  823. WCHAR tmLastChar;
  824. WCHAR tmDefaultChar;
  825. WCHAR tmBreakChar;
  826. BYTE tmItalic;
  827. BYTE tmUnderlined;
  828. BYTE tmStruckOut;
  829. BYTE tmPitchAndFamily;
  830. BYTE tmCharSet;
  831. }
  832. typedef TEXTMETRICW* PTEXTMETRICW;
  833. typedef TEXTMETRICW* NPTEXTMETRICW;
  834. typedef TEXTMETRICW* LPTEXTMETRICW;
  835. version(UNICODE) {
  836. typedef TEXTMETRICW TEXTMETRIC;
  837. typedef PTEXTMETRICW PTEXTMETRIC;
  838. typedef NPTEXTMETRICW NPTEXTMETRIC;
  839. typedef LPTEXTMETRICW LPTEXTMETRIC;
  840. }
  841. else {
  842. typedef TEXTMETRICA TEXTMETRIC;
  843. typedef PTEXTMETRICA PTEXTMETRIC;
  844. typedef NPTEXTMETRICA NPTEXTMETRIC;
  845. typedef LPTEXTMETRICA LPTEXTMETRIC;
  846. }
  847. /* ntmFlags field flags */
  848. const auto NTM_REGULAR = 0x00000040;
  849. const auto NTM_BOLD = 0x00000020;
  850. const auto NTM_ITALIC = 0x00000001;
  851. /* new in NT 5.0 */
  852. const auto NTM_NONNEGATIVE_AC = 0x00010000;
  853. const auto NTM_PS_OPENTYPE = 0x00020000;
  854. const auto NTM_TT_OPENTYPE = 0x00040000;
  855. const auto NTM_MULTIPLEMASTER = 0x00080000;
  856. const auto NTM_TYPE1 = 0x00100000;
  857. const auto NTM_DSIG = 0x00200000;
  858. align(4) struct NEWTEXTMETRICA {
  859. LONG tmHeight;
  860. LONG tmAscent;
  861. LONG tmDescent;
  862. LONG tmInternalLeading;
  863. LONG tmExternalLeading;
  864. LONG tmAveCharWidth;
  865. LONG tmMaxCharWidth;
  866. LONG tmWeight;
  867. LONG tmOverhang;
  868. LONG tmDigitizedAspectX;
  869. LONG tmDigitizedAspectY;
  870. BYTE tmFirstChar;
  871. BYTE tmLastChar;
  872. BYTE tmDefaultChar;
  873. BYTE tmBreakChar;
  874. BYTE tmItalic;
  875. BYTE tmUnderlined;
  876. BYTE tmStruckOut;
  877. BYTE tmPitchAndFamily;
  878. BYTE tmCharSet;
  879. DWORD ntmFlags;
  880. UINT ntmSizeEM;
  881. UINT ntmCellHeight;
  882. UINT ntmAvgWidth;
  883. }
  884. typedef NEWTEXTMETRICA* PNEWTEXTMETRICA;
  885. typedef NEWTEXTMETRICA* NPNEWTEXTMETRICA;
  886. typedef NEWTEXTMETRICA* LPNEWTEXTMETRICA;
  887. struct NEWTEXTMETRICW {
  888. LONG tmHeight;
  889. LONG tmAscent;
  890. LONG tmDescent;
  891. LONG tmInternalLeading;
  892. LONG tmExternalLeading;
  893. LONG tmAveCharWidth;
  894. LONG tmMaxCharWidth;
  895. LONG tmWeight;
  896. LONG tmOverhang;
  897. LONG tmDigitizedAspectX;
  898. LONG tmDigitizedAspectY;
  899. WCHAR tmFirstChar;
  900. WCHAR tmLastChar;
  901. WCHAR tmDefaultChar;
  902. WCHAR tmBreakChar;
  903. BYTE tmItalic;
  904. BYTE tmUnderlined;
  905. BYTE tmStruckOut;
  906. BYTE tmPitchAndFamily;
  907. BYTE tmCharSet;
  908. DWORD ntmFlags;
  909. UINT ntmSizeEM;
  910. UINT ntmCellHeight;
  911. UINT ntmAvgWidth;
  912. }
  913. typedef NEWTEXTMETRICW* PNEWTEXTMETRICW;
  914. typedef NEWTEXTMETRICW* NPNEWTEXTMETRICW;
  915. typedef NEWTEXTMETRICW* LPNEWTEXTMETRICW;
  916. version(UNICODE) {
  917. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  918. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  919. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  920. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  921. }
  922. else {
  923. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  924. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  925. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  926. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  927. }
  928. struct NEWTEXTMETRICEXA {
  929. NEWTEXTMETRICA ntmTm;
  930. FONTSIGNATURE ntmFontSig;
  931. }
  932. struct NEWTEXTMETRICEXW {
  933. NEWTEXTMETRICW ntmTm;
  934. FONTSIGNATURE ntmFontSig;
  935. }
  936. version(UNICODE) {
  937. typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
  938. }
  939. else {
  940. typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
  941. }
  942. /* GDI Logical Objects: */
  943. /* Pel Array */
  944. struct PELARRAY {
  945. LONG paXCount;
  946. LONG paYCount;
  947. LONG paXExt;
  948. LONG paYExt;
  949. BYTE paRGBs;
  950. }
  951. typedef PELARRAY* PPELARRAY;
  952. typedef PELARRAY* NPPELARRAY;
  953. typedef PELARRAY* LPPELARRAY;
  954. /* Logical Brush (or Pattern) */
  955. struct LOGBRUSH {
  956. UINT lbStyle;
  957. COLORREF lbColor;
  958. ULONG_PTR lbHatch; // Sundown: lbHatch could hold a HANDLE
  959. }
  960. typedef LOGBRUSH* PLOGBRUSH;
  961. typedef LOGBRUSH* NPLOGBRUSH;
  962. typedef LOGBRUSH* LPLOGBRUSH;
  963. struct LOGBRUSH32 {
  964. UINT lbStyle;
  965. COLORREF lbColor;
  966. ULONG lbHatch;
  967. }
  968. typedef LOGBRUSH32* PLOGBRUSH32;
  969. typedef LOGBRUSH32* NPLOGBRUSH32;
  970. typedef LOGBRUSH32* LPLOGBRUSH32;
  971. typedef LOGBRUSH PATTERN;
  972. typedef PATTERN *PPATTERN;
  973. typedef PATTERN *NPPATTERN;
  974. typedef PATTERN *LPPATTERN;
  975. /* Logical Pen */
  976. struct LOGPEN {
  977. UINT lopnStyle;
  978. POINT lopnWidth;
  979. COLORREF lopnColor;
  980. }
  981. typedef LOGPEN* PLOGPEN;
  982. typedef LOGPEN* NPLOGPEN;
  983. typedef LOGPEN* LPLOGPEN;
  984. struct EXTLOGPEN {
  985. DWORD elpPenStyle;
  986. DWORD elpWidth;
  987. UINT elpBrushStyle;
  988. COLORREF elpColor;
  989. ULONG_PTR elpHatch; //Sundown: elpHatch could take a HANDLE
  990. DWORD elpNumEntries;
  991. DWORD[1] elpStyleEntry;
  992. }
  993. typedef EXTLOGPEN* PEXTLOGPEN;
  994. typedef EXTLOGPEN* NPEXTLOGPEN;
  995. typedef EXTLOGPEN* LPEXTLOGPEN;
  996. struct PALETTEENTRY {
  997. BYTE peRed;
  998. BYTE peGreen;
  999. BYTE peBlue;
  1000. BYTE peFlags;
  1001. }
  1002. typedef PALETTEENTRY* PPALETTEENTRY;
  1003. typedef PALETTEENTRY* LPPALETTEENTRY;
  1004. /* Logical Palette */
  1005. struct LOGPALETTE {
  1006. WORD palVersion;
  1007. WORD palNumEntries;
  1008. PALETTEENTRY[1] palPalEntry;
  1009. }
  1010. typedef LOGPALETTE* PLOGPALETTE;
  1011. typedef LOGPALETTE* NPLOGPALETTE;
  1012. typedef LOGPALETTE* LPLOGPALETTE;
  1013. /* Logical Font */
  1014. const auto LF_FACESIZE = 32;
  1015. struct LOGFONTA {
  1016. LONG lfHeight;
  1017. LONG lfWidth;
  1018. LONG lfEscapement;
  1019. LONG lfOrientation;
  1020. LONG lfWeight;
  1021. BYTE lfItalic;
  1022. BYTE lfUnderline;
  1023. BYTE lfStrikeOut;
  1024. BYTE lfCharSet;
  1025. BYTE lfOutPrecision;
  1026. BYTE lfClipPrecision;
  1027. BYTE lfQuality;
  1028. BYTE lfPitchAndFamily;
  1029. CHAR lfFaceName[LF_FACESIZE];
  1030. }
  1031. typedef LOGFONTA* PLOGFONTA;
  1032. typedef LOGFONTA* NPLOGFONTA;
  1033. typedef LOGFONTA* LPLOGFONTA;
  1034. struct LOGFONTW {
  1035. LONG lfHeight;
  1036. LONG lfWidth;
  1037. LONG lfEscapement;
  1038. LONG lfOrientation;
  1039. LONG lfWeight;
  1040. BYTE lfItalic;
  1041. BYTE lfUnderline;
  1042. BYTE lfStrikeOut;
  1043. BYTE lfCharSet;
  1044. BYTE lfOutPrecision;
  1045. BYTE lfClipPrecision;
  1046. BYTE lfQuality;
  1047. BYTE lfPitchAndFamily;
  1048. WCHAR lfFaceName[LF_FACESIZE];
  1049. }
  1050. typedef LOGFONTW* PLOGFONTW;
  1051. typedef LOGFONTW* NPLOGFONTW;
  1052. typedef LOGFONTW* LPLOGFONTW;
  1053. version(UNICODE) {
  1054. typedef LOGFONTW LOGFONT;
  1055. typedef PLOGFONTW PLOGFONT;
  1056. typedef NPLOGFONTW NPLOGFONT;
  1057. typedef LPLOGFONTW LPLOGFONT;
  1058. }
  1059. else {
  1060. typedef LOGFONTA LOGFONT;
  1061. typedef PLOGFONTA PLOGFONT;
  1062. typedef NPLOGFONTA NPLOGFONT;
  1063. typedef LPLOGFONTA LPLOGFONT;
  1064. }
  1065. const auto LF_FULLFACESIZE = 64;
  1066. /* Structure passed to FONTENUMPROC */
  1067. struct ENUMLOGFONTA {
  1068. LOGFONTA elfLogFont;
  1069. BYTE elfFullName[LF_FULLFACESIZE];
  1070. BYTE elfStyle[LF_FACESIZE];
  1071. }
  1072. typedef ENUMLOGFONTA* LPENUMLOGFONTA;
  1073. /* Structure passed to FONTENUMPROC */
  1074. struct ENUMLOGFONTW {
  1075. LOGFONTW elfLogFont;
  1076. WCHAR[LF_FULLFACESIZE] elfFullName;
  1077. WCHAR[LF_FACESIZE] elfStyle;
  1078. }
  1079. typedef ENUMLOGFONTW* LPENUMLOGFONTW;
  1080. version(UNICODE) {
  1081. typedef ENUMLOGFONTW ENUMLOGFONT;
  1082. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  1083. }
  1084. else {
  1085. typedef ENUMLOGFONTA ENUMLOGFONT;
  1086. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  1087. }
  1088. struct ENUMLOGFONTEXA {
  1089. LOGFONTA elfLogFont;
  1090. BYTE elfFullName[LF_FULLFACESIZE];
  1091. BYTE elfStyle[LF_FACESIZE];
  1092. BYTE elfScript[LF_FACESIZE];
  1093. }
  1094. typedef ENUMLOGFONTEXA* LPENUMLOGFONTEXA;
  1095. struct ENUMLOGFONTEXW {
  1096. LOGFONTW elfLogFont;
  1097. WCHAR[LF_FULLFACESIZE] elfFullName;
  1098. WCHAR[LF_FACESIZE] elfStyle;
  1099. WCHAR[LF_FACESIZE] elfScript;
  1100. }
  1101. typedef ENUMLOGFONTEXW* LPENUMLOGFONTEXW;
  1102. version(UNICODE) {
  1103. typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
  1104. typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
  1105. }
  1106. else {
  1107. typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
  1108. typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
  1109. }
  1110. const auto OUT_DEFAULT_PRECIS = 0;
  1111. const auto OUT_STRING_PRECIS = 1;
  1112. const auto OUT_CHARACTER_PRECIS = 2;
  1113. const auto OUT_STROKE_PRECIS = 3;
  1114. const auto OUT_TT_PRECIS = 4;
  1115. const auto OUT_DEVICE_PRECIS = 5;
  1116. const auto OUT_RASTER_PRECIS = 6;
  1117. const auto OUT_TT_ONLY_PRECIS = 7;
  1118. const auto OUT_OUTLINE_PRECIS = 8;
  1119. const auto OUT_SCREEN_OUTLINE_PRECIS = 9;
  1120. const auto OUT_PS_ONLY_PRECIS = 10;
  1121. const auto CLIP_DEFAULT_PRECIS = 0;
  1122. const auto CLIP_CHARACTER_PRECIS = 1;
  1123. const auto CLIP_STROKE_PRECIS = 2;
  1124. const auto CLIP_MASK = 0xf;
  1125. const auto CLIP_LH_ANGLES = (1<<4);
  1126. const auto CLIP_TT_ALWAYS = (2<<4);
  1127. const auto CLIP_DFA_DISABLE = (4<<4);
  1128. const auto CLIP_EMBEDDED = (8<<4);
  1129. const auto DEFAULT_QUALITY = 0;
  1130. const auto DRAFT_QUALITY = 1;
  1131. const auto PROOF_QUALITY = 2;
  1132. const auto NONANTIALIASED_QUALITY = 3;
  1133. const auto ANTIALIASED_QUALITY = 4;
  1134. const auto CLEARTYPE_QUALITY = 5;
  1135. const auto CLEARTYPE_NATURAL_QUALITY = 6;
  1136. const auto DEFAULT_PITCH = 0;
  1137. const auto FIXED_PITCH = 1;
  1138. const auto VARIABLE_PITCH = 2;
  1139. const auto MONO_FONT = 8;
  1140. const auto ANSI_CHARSET = 0;
  1141. const auto DEFAULT_CHARSET = 1;
  1142. const auto SYMBOL_CHARSET = 2;
  1143. const auto SHIFTJIS_CHARSET = 128;
  1144. const auto HANGEUL_CHARSET = 129;
  1145. const auto HANGUL_CHARSET = 129;
  1146. const auto GB2312_CHARSET = 134;
  1147. const auto CHINESEBIG5_CHARSET = 136;
  1148. const auto OEM_CHARSET = 255;
  1149. const auto JOHAB_CHARSET = 130;
  1150. const auto HEBREW_CHARSET = 177;
  1151. const auto ARABIC_CHARSET = 178;
  1152. const auto GREEK_CHARSET = 161;
  1153. const auto TURKISH_CHARSET = 162;
  1154. const auto VIETNAMESE_CHARSET = 163;
  1155. const auto THAI_CHARSET = 222;
  1156. const auto EASTEUROPE_CHARSET = 238;
  1157. const auto RUSSIAN_CHARSET = 204;
  1158. const auto MAC_CHARSET = 77;
  1159. const auto BALTIC_CHARSET = 186;
  1160. const auto FS_LATIN1 = 0x00000001;
  1161. const auto FS_LATIN2 = 0x00000002;
  1162. const auto FS_CYRILLIC = 0x00000004;
  1163. const auto FS_GREEK = 0x00000008;
  1164. const auto FS_TURKISH = 0x00000010;
  1165. const auto FS_HEBREW = 0x00000020;
  1166. const auto FS_ARABIC = 0x00000040;
  1167. const auto FS_BALTIC = 0x00000080;
  1168. const auto FS_VIETNAMESE = 0x00000100;
  1169. const auto FS_THAI = 0x00010000;
  1170. const auto FS_JISJAPAN = 0x00020000;
  1171. const auto FS_CHINESESIMP = 0x00040000;
  1172. const auto FS_WANSUNG = 0x00080000;
  1173. const auto FS_CHINESETRAD = 0x00100000;
  1174. const auto FS_JOHAB = 0x00200000;
  1175. const auto FS_SYMBOL = 0x80000000;
  1176. /* Font Families */
  1177. const auto FF_DONTCARE = (0<<4); /* Don't care or don't know. */
  1178. const auto FF_ROMAN = (1<<4); /* Variable stroke width, serifed. */
  1179. /* Times Roman, Century Schoolbook, etc. */
  1180. const auto FF_SWISS = (2<<4); /* Variable stroke width, sans-serifed. */
  1181. /* Helvetica, Swiss, etc. */
  1182. const auto FF_MODERN = (3<<4); /* Constant stroke width, serifed or sans-serifed. */
  1183. /* Pica, Elite, Courier, etc. */
  1184. const auto FF_SCRIPT = (4<<4); /* Cursive, etc. */
  1185. const auto FF_DECORATIVE = (5<<4); /* Old English, etc. */
  1186. /* Font Weights */
  1187. const auto FW_DONTCARE = 0;
  1188. const auto FW_THIN = 100;
  1189. const auto FW_EXTRALIGHT = 200;
  1190. const auto FW_LIGHT = 300;
  1191. const auto FW_NORMAL = 400;
  1192. const auto FW_MEDIUM = 500;
  1193. const auto FW_SEMIBOLD = 600;
  1194. const auto FW_BOLD = 700;
  1195. const auto FW_EXTRABOLD = 800;
  1196. const auto FW_HEAVY = 900;
  1197. const auto FW_ULTRALIGHT = FW_EXTRALIGHT;
  1198. const auto FW_REGULAR = FW_NORMAL;
  1199. const auto FW_DEMIBOLD = FW_SEMIBOLD;
  1200. const auto FW_ULTRABOLD = FW_EXTRABOLD;
  1201. const auto FW_BLACK = FW_HEAVY;
  1202. const auto PANOSE_COUNT = 10;
  1203. const auto PAN_FAMILYTYPE_INDEX = 0;
  1204. const auto PAN_SERIFSTYLE_INDEX = 1;
  1205. const auto PAN_WEIGHT_INDEX = 2;
  1206. const auto PAN_PROPORTION_INDEX = 3;
  1207. const auto PAN_CONTRAST_INDEX = 4;
  1208. const auto PAN_STROKEVARIATION_INDEX = 5;
  1209. const auto PAN_ARMSTYLE_INDEX = 6;
  1210. const auto PAN_LETTERFORM_INDEX = 7;
  1211. const auto PAN_MIDLINE_INDEX = 8;
  1212. const auto PAN_XHEIGHT_INDEX = 9;
  1213. const auto PAN_CULTURE_LATIN = 0;
  1214. struct PANOSE {
  1215. BYTE bFamilyType;
  1216. BYTE bSerifStyle;
  1217. BYTE bWeight;
  1218. BYTE bProportion;
  1219. BYTE bContrast;
  1220. BYTE bStrokeVariation;
  1221. BYTE bArmStyle;
  1222. BYTE bLetterform;
  1223. BYTE bMidline;
  1224. BYTE bXHeight;
  1225. }
  1226. typedef PANOSE* LPPANOSE;
  1227. const auto PAN_ANY = 0; /* Any */
  1228. const auto PAN_NO_FIT = 1; /* No Fit */
  1229. const auto PAN_FAMILY_TEXT_DISPLAY = 2; /* Text and Display */
  1230. const auto PAN_FAMILY_SCRIPT = 3; /* Script */
  1231. const auto PAN_FAMILY_DECORATIVE = 4; /* Decorative */
  1232. const auto PAN_FAMILY_PICTORIAL = 5; /* Pictorial */
  1233. const auto PAN_SERIF_COVE = 2; /* Cove */
  1234. const auto PAN_SERIF_OBTUSE_COVE = 3; /* Obtuse Cove */
  1235. const auto PAN_SERIF_SQUARE_COVE = 4; /* Square Cove */
  1236. const auto PAN_SERIF_OBTUSE_SQUARE_COVE = 5; /* Obtuse Square Cove */
  1237. const auto PAN_SERIF_SQUARE = 6; /* Square */
  1238. const auto PAN_SERIF_THIN = 7; /* Thin */
  1239. const auto PAN_SERIF_BONE = 8; /* Bone */
  1240. const auto PAN_SERIF_EXAGGERATED = 9; /* Exaggerated */
  1241. const auto PAN_SERIF_TRIANGLE = 10; /* Triangle */
  1242. const auto PAN_SERIF_NORMAL_SANS = 11; /* Normal Sans */
  1243. const auto PAN_SERIF_OBTUSE_SANS = 12; /* Obtuse Sans */
  1244. const auto PAN_SERIF_PERP_SANS = 13; /* Prep Sans */
  1245. const auto PAN_SERIF_FLARED = 14; /* Flared */
  1246. const auto PAN_SERIF_ROUNDED = 15; /* Rounded */
  1247. const auto PAN_WEIGHT_VERY_LIGHT = 2; /* Very Light */
  1248. const auto PAN_WEIGHT_LIGHT = 3; /* Light */
  1249. const auto PAN_WEIGHT_THIN = 4; /* Thin */
  1250. const auto PAN_WEIGHT_BOOK = 5; /* Book */
  1251. const auto PAN_WEIGHT_MEDIUM = 6; /* Medium */
  1252. const auto PAN_WEIGHT_DEMI = 7; /* Demi */
  1253. const auto PAN_WEIGHT_BOLD = 8; /* Bold */
  1254. const auto PAN_WEIGHT_HEAVY = 9; /* Heavy */
  1255. const auto PAN_WEIGHT_BLACK = 10; /* Black */
  1256. const auto PAN_WEIGHT_NORD = 11; /* Nord */
  1257. const auto PAN_PROP_OLD_STYLE = 2; /* Old Style */
  1258. const auto PAN_PROP_MODERN = 3; /* Modern */
  1259. const auto PAN_PROP_EVEN_WIDTH = 4; /* Even Width */
  1260. const auto PAN_PROP_EXPANDED = 5; /* Expanded */
  1261. const auto PAN_PROP_CONDENSED = 6; /* Condensed */
  1262. const auto PAN_PROP_VERY_EXPANDED = 7; /* Very Expanded */
  1263. const auto PAN_PROP_VERY_CONDENSED = 8; /* Very Condensed */
  1264. const auto PAN_PROP_MONOSPACED = 9; /* Monospaced */
  1265. const auto PAN_CONTRAST_NONE = 2; /* None */
  1266. const auto PAN_CONTRAST_VERY_LOW = 3; /* Very Low */
  1267. const auto PAN_CONTRAST_LOW = 4; /* Low */
  1268. const auto PAN_CONTRAST_MEDIUM_LOW = 5; /* Medium Low */
  1269. const auto PAN_CONTRAST_MEDIUM = 6; /* Medium */
  1270. const auto PAN_CONTRAST_MEDIUM_HIGH = 7; /* Mediim High */
  1271. const auto PAN_CONTRAST_HIGH = 8; /* High */
  1272. const auto PAN_CONTRAST_VERY_HIGH = 9; /* Very High */
  1273. const auto PAN_STROKE_GRADUAL_DIAG = 2; /* Gradual/Diagonal */
  1274. const auto PAN_STROKE_GRADUAL_TRAN = 3; /* Gradual/Transitional */
  1275. const auto PAN_STROKE_GRADUAL_VERT = 4; /* Gradual/Vertical */
  1276. const auto PAN_STROKE_GRADUAL_HORZ = 5; /* Gradual/Horizontal */
  1277. const auto PAN_STROKE_RAPID_VERT = 6; /* Rapid/Vertical */
  1278. const auto PAN_STROKE_RAPID_HORZ = 7; /* Rapid/Horizontal */
  1279. const auto PAN_STROKE_INSTANT_VERT = 8; /* Instant/Vertical */
  1280. const auto PAN_STRAIGHT_ARMS_HORZ = 2; /* Straight Arms/Horizontal */
  1281. const auto PAN_STRAIGHT_ARMS_WEDGE = 3; /* Straight Arms/Wedge */
  1282. const auto PAN_STRAIGHT_ARMS_VERT = 4; /* Straight Arms/Vertical */
  1283. const auto PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5; /* Straight Arms/Single-Serif */
  1284. const auto PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6; /* Straight Arms/Double-Serif */
  1285. const auto PAN_BENT_ARMS_HORZ = 7; /* Non-Straight Arms/Horizontal */
  1286. const auto PAN_BENT_ARMS_WEDGE = 8; /* Non-Straight Arms/Wedge */
  1287. const auto PAN_BENT_ARMS_VERT = 9; /* Non-Straight Arms/Vertical */
  1288. const auto PAN_BENT_ARMS_SINGLE_SERIF = 10; /* Non-Straight Arms/Single-Serif */
  1289. const auto PAN_BENT_ARMS_DOUBLE_SERIF = 11; /* Non-Straight Arms/Double-Serif */
  1290. const auto PAN_LETT_NORMAL_CONTACT = 2; /* Normal/Contact */
  1291. const auto PAN_LETT_NORMAL_WEIGHTED = 3; /* Normal/Weighted */
  1292. const auto PAN_LETT_NORMAL_BOXED = 4; /* Normal/Boxed */
  1293. const auto PAN_LETT_NORMAL_FLATTENED = 5; /* Normal/Flattened */
  1294. const auto PAN_LETT_NORMAL_ROUNDED = 6; /* Normal/Rounded */
  1295. const auto PAN_LETT_NORMAL_OFF_CENTER = 7; /* Normal/Off Center */
  1296. const auto PAN_LETT_NORMAL_SQUARE = 8; /* Normal/Square */
  1297. const auto PAN_LETT_OBLIQUE_CONTACT = 9; /* Oblique/Contact */
  1298. const auto PAN_LETT_OBLIQUE_WEIGHTED = 10; /* Oblique/Weighted */
  1299. const auto PAN_LETT_OBLIQUE_BOXED = 11; /* Oblique/Boxed */
  1300. const auto PAN_LETT_OBLIQUE_FLATTENED = 12; /* Oblique/Flattened */
  1301. const auto PAN_LETT_OBLIQUE_ROUNDED = 13; /* Oblique/Rounded */
  1302. const auto PAN_LETT_OBLIQUE_OFF_CENTER = 14; /* Oblique/Off Center */
  1303. const auto PAN_LETT_OBLIQUE_SQUARE = 15; /* Oblique/Square */
  1304. const auto PAN_MIDLINE_STANDARD_TRIMMED = 2; /* Standard/Trimmed */
  1305. const auto PAN_MIDLINE_STANDARD_POINTED = 3; /* Standard/Pointed */
  1306. const auto PAN_MIDLINE_STANDARD_SERIFED = 4; /* Standard/Serifed */
  1307. const auto PAN_MIDLINE_HIGH_TRIMMED = 5; /* High/Trimmed */
  1308. const auto PAN_MIDLINE_HIGH_POINTED = 6; /* High/Pointed */
  1309. const auto PAN_MIDLINE_HIGH_SERIFED = 7; /* High/Serifed */
  1310. const auto PAN_MIDLINE_CONSTANT_TRIMMED = 8; /* Constant/Trimmed */
  1311. const auto PAN_MIDLINE_CONSTANT_POINTED = 9; /* Constant/Pointed */
  1312. const auto PAN_MIDLINE_CONSTANT_SERIFED = 10; /* Constant/Serifed */
  1313. const auto PAN_MIDLINE_LOW_TRIMMED = 11; /* Low/Trimmed */
  1314. const auto PAN_MIDLINE_LOW_POINTED = 12; /* Low/Pointed */
  1315. const auto PAN_MIDLINE_LOW_SERIFED = 13; /* Low/Serifed */
  1316. const auto PAN_XHEIGHT_CONSTANT_SMALL = 2; /* Constant/Small */
  1317. const auto PAN_XHEIGHT_CONSTANT_STD = 3; /* Constant/Standard */
  1318. const auto PAN_XHEIGHT_CONSTANT_LARGE = 4; /* Constant/Large */
  1319. const auto PAN_XHEIGHT_DUCKING_SMALL = 5; /* Ducking/Small */
  1320. const auto PAN_XHEIGHT_DUCKING_STD = 6; /* Ducking/Standard */
  1321. const auto PAN_XHEIGHT_DUCKING_LARGE = 7; /* Ducking/Large */
  1322. const auto ELF_VENDOR_SIZE = 4;
  1323. /* The extended logical font */
  1324. /* An extension of the ENUMLOGFONT */
  1325. struct EXTLOGFONTA {
  1326. LOGFONTA elfLogFont;
  1327. BYTE elfFullName[LF_FULLFACESIZE];
  1328. BYTE elfStyle[LF_FACESIZE];
  1329. DWORD elfVersion; /* 0 for the first release of NT */
  1330. DWORD elfStyleSize;
  1331. DWORD elfMatch;
  1332. DWORD elfReserved;
  1333. BYTE elfVendorId[ELF_VENDOR_SIZE];
  1334. DWORD elfCulture; /* 0 for Latin */
  1335. PANOSE elfPanose;
  1336. }
  1337. typedef EXTLOGFONTA* PEXTLOGFONTA;
  1338. typedef EXTLOGFONTA* NPEXTLOGFONTA;
  1339. typedef EXTLOGFONTA* LPEXTLOGFONTA;
  1340. struct EXTLOGFONTW {
  1341. LOGFONTW elfLogFont;
  1342. WCHAR elfFullName[LF_FULLFACESIZE];
  1343. WCHAR elfStyle[LF_FACESIZE];
  1344. DWORD elfVersion; /* 0 for the first release of NT */
  1345. DWORD elfStyleSize;
  1346. DWORD elfMatch;
  1347. DWORD elfReserved;
  1348. BYTE elfVendorId[ELF_VENDOR_SIZE];
  1349. DWORD elfCulture; /* 0 for Latin */
  1350. PANOSE elfPanose;
  1351. }
  1352. typedef EXTLOGFONTW* PEXTLOGFONTW;
  1353. typedef EXTLOGFONTW* NPEXTLOGFONTW;
  1354. typedef EXTLOGFONTW* LPEXTLOGFONTW;
  1355. version(UNICODE) {
  1356. typedef EXTLOGFONTW EXTLOGFONT;
  1357. typedef PEXTLOGFONTW PEXTLOGFONT;
  1358. typedef NPEXTLOGFONTW NPEXTLOGFONT;
  1359. typedef LPEXTLOGFONTW LPEXTLOGFONT;
  1360. }
  1361. else {
  1362. typedef EXTLOGFONTA EXTLOGFONT;
  1363. typedef PEXTLOGFONTA PEXTLOGFONT;
  1364. typedef NPEXTLOGFONTA NPEXTLOGFONT;
  1365. typedef LPEXTLOGFONTA LPEXTLOGFONT;
  1366. }
  1367. const auto ELF_VERSION = 0;
  1368. const auto ELF_CULTURE_LATIN = 0;
  1369. /* EnumFonts Masks */
  1370. const auto RASTER_FONTTYPE = 0x0001;
  1371. const auto DEVICE_FONTTYPE = 0x002;
  1372. const auto TRUETYPE_FONTTYPE = 0x004;
  1373. template RGB(BYTE r, BYTE g, BYTE b) {
  1374. const COLORREF RGB = (cast(COLORREF)((cast(BYTE)(r)|(cast(WORD)(cast(BYTE)(g))<<8))|((cast(DWORD)cast(BYTE)(b))<<16)));
  1375. }
  1376. template PALETTERGB(BYTE r, BYTE g, BYTE b) {
  1377. const uint PALETTERGB = (0x2000000 | RGB!(r,g,b));
  1378. }
  1379. template PALETTEINDEX(BYTE i) {
  1380. const uint PALETTEINDEX = (cast(COLORREF)(0x01000000 | cast(DWORD)cast(WORD)(i)));
  1381. }
  1382. /* palette entry flags */
  1383. const auto PC_RESERVED = 0x01; /* palette index used for animation */
  1384. const auto PC_EXPLICIT = 0x02; /* palette index is explicit to device */
  1385. const auto PC_NOCOLLAPSE = 0x04; /* do not match color to system palette */
  1386. BYTE GetRValue(COLORREF rgb) {
  1387. return LOBYTE(cast(WORD)rgb);
  1388. }
  1389. BYTE GetGValue(COLORREF rgb) {
  1390. return LOBYTE(cast(WORD)((cast(WORD)rgb) >> 8));
  1391. }
  1392. BYTE GetBValue(COLORREF rgb) {
  1393. return LOBYTE(cast(WORD)(rgb >> 16));
  1394. }
  1395. /* Background Modes */
  1396. const auto TRANSPARENT = 1;
  1397. const auto OPAQUE = 2;
  1398. const auto BKMODE_LAST = 2;
  1399. /* Graphics Modes */
  1400. const auto GM_COMPATIBLE = 1;
  1401. const auto GM_ADVANCED = 2;
  1402. const auto GM_LAST = 2;
  1403. /* PolyDraw and GetPath point types */
  1404. const auto PT_CLOSEFIGURE = 0x01;
  1405. const auto PT_LINETO = 0x02;
  1406. const auto PT_BEZIERTO = 0x04;
  1407. const auto PT_MOVETO = 0x06;
  1408. /* Mapping Modes */
  1409. const auto MM_TEXT = 1;
  1410. const auto MM_LOMETRIC = 2;
  1411. const auto MM_HIMETRIC = 3;
  1412. const auto MM_LOENGLISH = 4;
  1413. const auto MM_HIENGLISH = 5;
  1414. const auto MM_TWIPS = 6;
  1415. const auto MM_ISOTROPIC = 7;
  1416. const auto MM_ANISOTROPIC = 8;
  1417. /* Min and Max Mapping Mode values */
  1418. const auto MM_MIN = MM_TEXT;
  1419. const auto MM_MAX = MM_ANISOTROPIC;
  1420. const auto MM_MAX_FIXEDSCALE = MM_TWIPS;
  1421. /* Coordinate Modes */
  1422. const auto ABSOLUTE = 1;
  1423. const auto RELATIVE = 2;
  1424. /* Stock Logical Objects */
  1425. const auto WHITE_BRUSH = 0;
  1426. const auto LTGRAY_BRUSH = 1;
  1427. const auto GRAY_BRUSH = 2;
  1428. const auto DKGRAY_BRUSH = 3;
  1429. const auto BLACK_BRUSH = 4;
  1430. const auto NULL_BRUSH = 5;
  1431. const auto HOLLOW_BRUSH = NULL_BRUSH;
  1432. const auto WHITE_PEN = 6;
  1433. const auto BLACK_PEN = 7;
  1434. const auto NULL_PEN = 8;
  1435. const auto OEM_FIXED_FONT = 10;
  1436. const auto ANSI_FIXED_FONT = 11;
  1437. const auto ANSI_VAR_FONT = 12;
  1438. const auto SYSTEM_FONT = 13;
  1439. const auto DEVICE_DEFAULT_FONT = 14;
  1440. const auto DEFAULT_PALETTE = 15;
  1441. const auto SYSTEM_FIXED_FONT = 16;
  1442. const auto DEFAULT_GUI_FONT = 17;
  1443. const auto DC_BRUSH = 18;
  1444. const auto DC_PEN = 19;
  1445. const auto STOCK_LAST = 19;
  1446. const auto CLR_INVALID = 0xFFFFFFFF;
  1447. /* Brush Styles */
  1448. const auto BS_SOLID = 0;
  1449. const auto BS_NULL = 1;
  1450. const auto BS_HOLLOW = BS_NULL;
  1451. const auto BS_HATCHED = 2;
  1452. const auto BS_PATTERN = 3;
  1453. const auto BS_INDEXED = 4;
  1454. const auto BS_DIBPATTERN = 5;
  1455. const auto BS_DIBPATTERNPT = 6;
  1456. const auto BS_PATTERN8X8 = 7;
  1457. const auto BS_DIBPATTERN8X8 = 8;
  1458. const auto BS_MONOPATTERN = 9;
  1459. /* Hatch Styles */
  1460. const auto HS_HORIZONTAL = 0; /* ----- */
  1461. const auto HS_VERTICAL = 1; /* ||||| */
  1462. const auto HS_FDIAGONAL = 2; /* \\\\\ */
  1463. const auto HS_BDIAGONAL = 3; /* ///// */
  1464. const auto HS_CROSS = 4; /* +++++ */
  1465. const auto HS_DIAGCROSS = 5; /* xxxxx */
  1466. /* Pen Styles */
  1467. const auto PS_SOLID = 0;
  1468. const auto PS_DASH = 1; /* ------- */
  1469. const auto PS_DOT = 2; /* ....... */
  1470. const auto PS_DASHDOT = 3; /* _._._._ */
  1471. const auto PS_DASHDOTDOT = 4; /* _.._.._ */
  1472. const auto PS_NULL = 5;
  1473. const auto PS_INSIDEFRAME = 6;
  1474. const auto PS_USERSTYLE = 7;
  1475. const auto PS_ALTERNATE = 8;
  1476. const auto PS_STYLE_MASK = 0x0000000F;
  1477. const auto PS_ENDCAP_ROUND = 0x00000000;
  1478. const auto PS_ENDCAP_SQUARE = 0x00000100;
  1479. const auto PS_ENDCAP_FLAT = 0x00000200;
  1480. const auto PS_ENDCAP_MASK = 0x00000F00;
  1481. const auto PS_JOIN_ROUND = 0x00000000;
  1482. const auto PS_JOIN_BEVEL = 0x00001000;
  1483. const auto PS_JOIN_MITER = 0x00002000;
  1484. const auto PS_JOIN_MASK = 0x0000F000;
  1485. const auto PS_COSMETIC = 0x00000000;
  1486. const auto PS_GEOMETRIC = 0x00010000;
  1487. const auto PS_TYPE_MASK = 0x000F0000;
  1488. const auto AD_COUNTERCLOCKWISE = 1;
  1489. const auto AD_CLOCKWISE = 2;
  1490. /* Device Parameters for GetDeviceCaps() */
  1491. const auto DRIVERVERSION = 0; /* Device driver version */
  1492. const auto TECHNOLOGY = 2; /* Device classification */
  1493. const auto HORZSIZE = 4; /* Horizontal size in millimeters */
  1494. const auto VERTSIZE = 6; /* Vertical size in millimeters */
  1495. const auto HORZRES = 8; /* Horizontal width in pixels */
  1496. const auto VERTRES = 10; /* Vertical height in pixels */
  1497. const auto BITSPIXEL = 12; /* Number of bits per pixel */
  1498. const auto PLANES = 14; /* Number of planes */
  1499. const auto NUMBRUSHES = 16; /* Number of brushes the device has */
  1500. const auto NUMPENS = 18; /* Number of pens the device has */
  1501. const auto NUMMARKERS = 20; /* Number of markers the device has */
  1502. const auto NUMFONTS = 22; /* Number of fonts the device has */
  1503. const auto NUMCOLORS = 24; /* Number of colors the device supports */
  1504. const auto PDEVICESIZE = 26; /* Size required for device descriptor */
  1505. const auto CURVECAPS = 28; /* Curve capabilities */
  1506. const auto LINECAPS = 30; /* Line capabilities */
  1507. const auto POLYGONALCAPS = 32; /* Polygonal capabilities */
  1508. const auto TEXTCAPS = 34; /* Text capabilities */
  1509. const auto CLIPCAPS = 36; /* Clipping capabilities */
  1510. const auto RASTERCAPS = 38; /* Bitblt capabilities */
  1511. const auto ASPECTX = 40; /* Length of the X leg */
  1512. const auto ASPECTY = 42; /* Length of the Y leg */
  1513. const auto ASPECTXY = 44; /* Length of the hypotenuse */
  1514. const auto LOGPIXELSX = 88; /* Logical pixels/inch in X */
  1515. const auto LOGPIXELSY = 90; /* Logical pixels/inch in Y */
  1516. const auto SIZEPALETTE = 104; /* Number of entries in physical palette */
  1517. const auto NUMRESERVED = 106; /* Number of reserved entries in palette */
  1518. const auto COLORRES = 108; /* Actual color resolution */
  1519. // Printing related DeviceCaps. These replace the appropriate Escapes
  1520. const auto PHYSICALWIDTH = 110; /* Physical Width in device units */
  1521. const auto PHYSICALHEIGHT = 111; /* Physical Height in device units */
  1522. const auto PHYSICALOFFSETX = 112; /* Physical Printable Area x margin */
  1523. const auto PHYSICALOFFSETY = 113; /* Physical Printable Area y margin */
  1524. const auto SCALINGFACTORX = 114; /* Scaling factor x */
  1525. const auto SCALINGFACTORY = 115; /* Scaling factor y */
  1526. // Display driver specific
  1527. const auto VREFRESH = 116; /* Current vertical refresh rate of the */
  1528. /* display device (for displays only) in Hz*/
  1529. const auto DESKTOPVERTRES = 117; /* Horizontal width of entire desktop in */
  1530. /* pixels */
  1531. const auto DESKTOPHORZRES = 118; /* Vertical height of entire desktop in */
  1532. /* pixels */
  1533. const auto BLTALIGNMENT = 119; /* Preferred blt alignment */
  1534. const auto SHADEBLENDCAPS = 120; /* Shading and blending caps */
  1535. const auto COLORMGMTCAPS = 121; /* Color Management caps */
  1536. /* Device Capability Masks: */
  1537. /* Device Technologies */
  1538. const auto DT_PLOTTER = 0; /* Vector plotter */
  1539. const auto DT_RASDISPLAY = 1; /* Raster display */
  1540. const auto DT_RASPRINTER = 2; /* Raster printer */
  1541. const auto DT_RASCAMERA = 3; /* Raster camera */
  1542. const auto DT_CHARSTREAM = 4; /* Character-stream, PLP */
  1543. const auto DT_METAFILE = 5; /* Metafile, VDM */
  1544. const auto DT_DISPFILE = 6; /* Display-file */
  1545. /* Curve Capabilities */
  1546. const auto CC_NONE = 0; /* Curves not supported */
  1547. const auto CC_CIRCLES = 1; /* Can do circles */
  1548. const auto CC_PIE = 2; /* Can do pie wedges */
  1549. const auto CC_CHORD = 4; /* Can do chord arcs */
  1550. const auto CC_ELLIPSES = 8; /* Can do ellipese */
  1551. const auto CC_WIDE = 16; /* Can do wide lines */
  1552. const auto CC_STYLED = 32; /* Can do styled lines */
  1553. const auto CC_WIDESTYLED = 64; /* Can do wide styled lines */
  1554. const auto CC_INTERIORS = 128; /* Can do interiors */
  1555. const auto CC_ROUNDRECT = 256; /* */
  1556. /* Line Capabilities */
  1557. const auto LC_NONE = 0; /* Lines not supported */
  1558. const auto LC_POLYLINE = 2; /* Can do polylines */
  1559. const auto LC_MARKER = 4; /* Can do markers */
  1560. const auto LC_POLYMARKER = 8; /* Can do polymarkers */
  1561. const auto LC_WIDE = 16; /* Can do wide lines */
  1562. const auto LC_STYLED = 32; /* Can do styled lines */
  1563. const auto LC_WIDESTYLED = 64; /* Can do wide styled lines */
  1564. const auto LC_INTERIORS = 128; /* Can do interiors */
  1565. /* Polygonal Capabilities */
  1566. const auto PC_NONE = 0; /* Polygonals not supported */
  1567. const auto PC_POLYGON = 1; /* Can do polygons */
  1568. const auto PC_RECTANGLE = 2; /* Can do rectangles */
  1569. const auto PC_WINDPOLYGON = 4; /* Can do winding polygons */
  1570. const auto PC_TRAPEZOID = 4; /* Can do trapezoids */
  1571. const auto PC_SCANLINE = 8; /* Can do scanlines */
  1572. const auto PC_WIDE = 16; /* Can do wide borders */
  1573. const auto PC_STYLED = 32; /* Can do styled borders */
  1574. const auto PC_WIDESTYLED = 64; /* Can do wide styled borders */
  1575. const auto PC_INTERIORS = 128; /* Can do interiors */
  1576. const auto PC_POLYPOLYGON = 256; /* Can do polypolygons */
  1577. const auto PC_PATHS = 512; /* Can do paths */
  1578. /* Clipping Capabilities */
  1579. const auto CP_NONE = 0; /* No clipping of output */
  1580. const auto CP_RECTANGLE = 1; /* Output clipped to rects */
  1581. const auto CP_REGION = 2; /* obsolete */
  1582. /* Text Capabilities */
  1583. const auto TC_OP_CHARACTER = 0x00000001; /* Can do OutputPrecision CHARACTER */
  1584. const auto TC_OP_STROKE = 0x00000002; /* Can do OutputPrecision STROKE */
  1585. const auto TC_CP_STROKE = 0x00000004; /* Can do ClipPrecision STROKE */
  1586. const auto TC_CR_90 = 0x00000008; /* Can do CharRotAbility 90 */
  1587. const auto TC_CR_ANY = 0x00000010; /* Can do CharRotAbility ANY */
  1588. const auto TC_SF_X_YINDEP = 0x00000020; /* Can do ScaleFreedom X_YINDEPENDENT */
  1589. const auto TC_SA_DOUBLE = 0x00000040; /* Can do ScaleAbility DOUBLE */
  1590. const auto TC_SA_INTEGER = 0x00000080; /* Can do ScaleAbility INTEGER */
  1591. const auto TC_SA_CONTIN = 0x00000100; /* Can do ScaleAbility CONTINUOUS */
  1592. const auto TC_EA_DOUBLE = 0x00000200; /* Can do EmboldenAbility DOUBLE */
  1593. const auto TC_IA_ABLE = 0x00000400; /* Can do ItalisizeAbility ABLE */
  1594. const auto TC_UA_ABLE = 0x00000800; /* Can do UnderlineAbility ABLE */
  1595. const auto TC_SO_ABLE = 0x00001000; /* Can do StrikeOutAbility ABLE */
  1596. const auto TC_RA_ABLE = 0x00002000; /* Can do RasterFontAble ABLE */
  1597. const auto TC_VA_ABLE = 0x00004000; /* Can do VectorFontAble ABLE */
  1598. const auto TC_RESERVED = 0x00008000;
  1599. const auto TC_SCROLLBLT = 0x00010000; /* Don't do text scroll with blt */
  1600. /* Raster Capabilities */
  1601. const auto RC_NONE = 0;
  1602. const auto RC_BITBLT = 1; /* Can do standard BLT. */
  1603. const auto RC_BANDING = 2; /* Device requires banding support */
  1604. const auto RC_SCALING = 4; /* Device requires scaling support */
  1605. const auto RC_BITMAP64 = 8; /* Device can support >64K bitmap */
  1606. const auto RC_GDI20_OUTPUT = 0x0010; /* has 2.0 output calls */
  1607. const auto RC_GDI20_STATE = 0x0020;
  1608. const auto RC_SAVEBITMAP = 0x0040;
  1609. const auto RC_DI_BITMAP = 0x0080; /* supports DIB to memory */
  1610. const auto RC_PALETTE = 0x0100; /* supports a palette */
  1611. const auto RC_DIBTODEV = 0x0200; /* supports DIBitsToDevice */
  1612. const auto RC_BIGFONT = 0x0400; /* supports >64K fonts */
  1613. const auto RC_STRETCHBLT = 0x0800; /* supports StretchBlt */
  1614. const auto RC_FLOODFILL = 0x1000; /* supports FloodFill */
  1615. const auto RC_STRETCHDIB = 0x2000; /* supports StretchDIBits */
  1616. const auto RC_OP_DX_OUTPUT = 0x4000;
  1617. const auto RC_DEVBITS = 0x8000;
  1618. /* Shading and blending caps */
  1619. const auto SB_NONE = 0x00000000;
  1620. const auto SB_CONST_ALPHA = 0x00000001;
  1621. const auto SB_PIXEL_ALPHA = 0x00000002;
  1622. const auto SB_PREMULT_ALPHA = 0x00000004;
  1623. const auto SB_GRAD_RECT = 0x00000010;
  1624. const auto SB_GRAD_TRI = 0x00000020;
  1625. /* Color Management caps */
  1626. const auto CM_NONE = 0x00000000;
  1627. const auto CM_DEVICE_ICM = 0x00000001;
  1628. const auto CM_GAMMA_RAMP = 0x00000002;
  1629. const auto CM_CMYK_COLOR = 0x00000004;
  1630. /* DIB color table identifiers */
  1631. const auto DIB_RGB_COLORS = 0; /* color table in RGBs */
  1632. const auto DIB_PAL_COLORS = 1; /* color table in palette indices */
  1633. /* constants for Get/SetSystemPaletteUse() */
  1634. const auto SYSPAL_ERROR = 0;
  1635. const auto SYSPAL_STATIC = 1;
  1636. const auto SYSPAL_NOSTATIC = 2;
  1637. const auto SYSPAL_NOSTATIC256 = 3;
  1638. /* constants for CreateDIBitmap */
  1639. const auto CBM_INIT = 0x04; /* initialize bitmap */
  1640. /* ExtFloodFill style flags */
  1641. const auto FLOODFILLBORDER = 0;
  1642. const auto FLOODFILLSURFACE = 1;
  1643. /* size of a device name string */
  1644. // import winuser.d:
  1645. //const auto CCHDEVICENAME = 32;
  1646. /* size of a form name string */
  1647. const auto CCHFORMNAME = 32;
  1648. struct DEVMODEA {
  1649. BYTE[CCHDEVICENAME] dmDeviceName;
  1650. WORD dmSpecVersion;
  1651. WORD dmDriverVersion;
  1652. WORD dmSize;
  1653. WORD dmDriverExtra;
  1654. DWORD dmFields;
  1655. union _inner_union {
  1656. /* printer only fields */
  1657. struct _dm_printer {
  1658. short dmOrientation;
  1659. short dmPaperSize;
  1660. short dmPaperLength;
  1661. short dmPaperWidth;
  1662. short dmScale;
  1663. short dmCopies;
  1664. short dmDefaultSource;
  1665. short dmPrintQuality;
  1666. }
  1667. /* display only fields */
  1668. struct _dm_display {
  1669. POINTL dmPosition;
  1670. DWORD dmDisplayOrientation;
  1671. DWORD dmDisplayFixedOutput;
  1672. }
  1673. _dm_printer printer;
  1674. _dm_display display;
  1675. }
  1676. _inner_union fields;
  1677. short dmColor;
  1678. short dmDuplex;
  1679. short dmYResolution;
  1680. short dmTTOption;
  1681. short dmCollate;
  1682. BYTE dmFormName[CCHFORMNAME];
  1683. WORD dmLogPixels;
  1684. DWORD dmBitsPerPel;
  1685. DWORD dmPelsWidth;
  1686. DWORD dmPelsHeight;
  1687. DWORD dmDisplayFlags;
  1688. DWORD dmDisplayFrequency;
  1689. DWORD dmICMMethod;
  1690. DWORD dmICMIntent;
  1691. DWORD dmMediaType;
  1692. DWORD dmDitherType;
  1693. DWORD dmReserved1;
  1694. DWORD dmReserved2;
  1695. DWORD dmPanningWidth;
  1696. DWORD dmPanningHeight;
  1697. }
  1698. typedef DEVMODEA* PDEVMODEA;
  1699. typedef DEVMODEA* NPDEVMODEA;
  1700. typedef DEVMODEA* LPDEVMODEA;
  1701. struct DEVMODEW {
  1702. WCHAR[CCHDEVICENAME] dmDeviceName;
  1703. WORD dmSpecVersion;
  1704. WORD dmDriverVersion;
  1705. WORD dmSize;
  1706. WORD dmDriverExtra;
  1707. DWORD dmFields;
  1708. union _inner_union {
  1709. /* printer only fields */
  1710. struct _dm_printer {
  1711. short dmOrientation;
  1712. short dmPaperSize;
  1713. short dmPaperLength;
  1714. short dmPaperWidth;
  1715. short dmScale;
  1716. short dmCopies;
  1717. short dmDefaultSource;
  1718. short dmPrintQuality;
  1719. }
  1720. /* display only fields */
  1721. struct _dm_display {
  1722. POINTL dmPosition;
  1723. DWORD dmDisplayOrientation;
  1724. DWORD dmDisplayFixedOutput;
  1725. }
  1726. _dm_printer printer;
  1727. _dm_display display;
  1728. }
  1729. _inner_union fields;
  1730. short dmColor;
  1731. short dmDuplex;
  1732. short dmYResolution;
  1733. short dmTTOption;
  1734. short dmCollate;
  1735. WCHAR dmFormName[CCHFORMNAME];
  1736. WORD dmLogPixels;
  1737. DWORD dmBitsPerPel;
  1738. DWORD dmPelsWidth;
  1739. DWORD dmPelsHeight;
  1740. DWORD dmDisplayFlags;
  1741. DWORD dmDisplayFrequency;
  1742. DWORD dmICMMethod;
  1743. DWORD dmICMIntent;
  1744. DWORD dmMediaType;
  1745. DWORD dmDitherType;
  1746. DWORD dmReserved1;
  1747. DWORD dmReserved2;
  1748. DWORD dmPanningWidth;
  1749. DWORD dmPanningHeight;
  1750. }
  1751. typedef DEVMODEW* PDEVMODEW;
  1752. typedef DEVMODEW* NPDEVMODEW;
  1753. typedef DEVMODEW* LPDEVMODEW;
  1754. version(UNICODE) {
  1755. typedef DEVMODEW DEVMODE;
  1756. typedef PDEVMODEW PDEVMODE;
  1757. typedef NPDEVMODEW NPDEVMODE;
  1758. typedef LPDEVMODEW LPDEVMODE;
  1759. }
  1760. else {
  1761. typedef DEVMODEA DEVMODE;
  1762. typedef PDEVMODEA PDEVMODE;
  1763. typedef NPDEVMODEA NPDEVMODE;
  1764. typedef LPDEVMODEA LPDEVMODE;
  1765. }
  1766. /* current version of specification */
  1767. const auto DM_SPECVERSION = 0x0401;
  1768. /* field selection bits */
  1769. const auto DM_ORIENTATION = 0x00000001L;
  1770. const auto DM_PAPERSIZE = 0x00000002L;
  1771. const auto DM_PAPERLENGTH = 0x00000004L;
  1772. const auto DM_PAPERWIDTH = 0x00000008L;
  1773. const auto DM_SCALE = 0x00000010L;
  1774. const auto DM_POSITION = 0x00000020L;
  1775. const auto DM_NUP = 0x00000040L;
  1776. const auto DM_DISPLAYORIENTATION = 0x00000080L;
  1777. const auto DM_COPIES = 0x00000100L;
  1778. const auto DM_DEFAULTSOURCE = 0x00000200L;
  1779. const auto DM_PRINTQUALITY = 0x00000400L;
  1780. const auto DM_COLOR = 0x00000800L;
  1781. const auto DM_DUPLEX = 0x00001000L;
  1782. const auto DM_YRESOLUTION = 0x00002000L;
  1783. const auto DM_TTOPTION = 0x00004000L;
  1784. const auto DM_COLLATE = 0x00008000L;
  1785. const auto DM_FORMNAME = 0x00010000L;
  1786. const auto DM_LOGPIXELS = 0x00020000L;
  1787. const auto DM_BITSPERPEL = 0x00040000L;
  1788. const auto DM_PELSWIDTH = 0x00080000L;
  1789. const auto DM_PELSHEIGHT = 0x00100000L;
  1790. const auto DM_DISPLAYFLAGS = 0x00200000L;
  1791. const auto DM_DISPLAYFREQUENCY = 0x00400000L;
  1792. const auto DM_ICMMETHOD = 0x00800000L;
  1793. const auto DM_ICMINTENT = 0x01000000L;
  1794. const auto DM_MEDIATYPE = 0x02000000L;
  1795. const auto DM_DITHERTYPE = 0x04000000L;
  1796. const auto DM_PANNINGWIDTH = 0x08000000L;
  1797. const auto DM_PANNINGHEIGHT = 0x10000000L;
  1798. const auto DM_DISPLAYFIXEDOUTPUT = 0x20000000L;
  1799. /* orientation selections */
  1800. const auto DMORIENT_PORTRAIT = 1;
  1801. const auto DMORIENT_LANDSCAPE = 2;
  1802. /* paper selections */
  1803. const auto DMPAPER_LETTER = 1; /* Letter 8 1/2 x 11 in */
  1804. const auto DMPAPER_FIRST = DMPAPER_LETTER;
  1805. const auto DMPAPER_LETTERSMALL = 2; /* Letter Small 8 1/2 x 11 in */
  1806. const auto DMPAPER_TABLOID = 3; /* Tabloid 11 x 17 in */
  1807. const auto DMPAPER_LEDGER = 4; /* Ledger 17 x 11 in */
  1808. const auto DMPAPER_LEGAL = 5; /* Legal 8 1/2 x 14 in */
  1809. const auto DMPAPER_STATEMENT = 6; /* Statement 5 1/2 x 8 1/2 in */
  1810. const auto DMPAPER_EXECUTIVE = 7; /* Executive 7 1/4 x 10 1/2 in */
  1811. const auto DMPAPER_A3 = 8; /* A3 297 x 420 mm */
  1812. const auto DMPAPER_A4 = 9; /* A4 210 x 297 mm */
  1813. const auto DMPAPER_A4SMALL = 10; /* A4 Small 210 x 297 mm */
  1814. const auto DMPAPER_A5 = 11; /* A5 148 x 210 mm */
  1815. const auto DMPAPER_B4 = 12; /* B4 (JIS) 250 x 354 */
  1816. const auto DMPAPER_B5 = 13; /* B5 (JIS) 182 x 257 mm */
  1817. const auto DMPAPER_FOLIO = 14; /* Folio 8 1/2 x 13 in */
  1818. const auto DMPAPER_QUARTO = 15; /* Quarto 215 x 275 mm */
  1819. const auto DMPAPER_10X14 = 16; /* 10x14 in */
  1820. const auto DMPAPER_11X17 = 17; /* 11x17 in */
  1821. const auto DMPAPER_NOTE = 18; /* Note 8 1/2 x 11 in */
  1822. const auto DMPAPER_ENV_9 = 19; /* Envelope #9 3 7/8 x 8 7/8 */
  1823. const auto DMPAPER_ENV_10 = 20; /* Envelope #10 4 1/8 x 9 1/2 */
  1824. const auto DMPAPER_ENV_11 = 21; /* Envelope #11 4 1/2 x 10 3/8 */
  1825. const auto DMPAPER_ENV_12 = 22; /* Envelope #12 4 \276 x 11 */
  1826. const auto DMPAPER_ENV_14 = 23; /* Envelope #14 5 x 11 1/2 */
  1827. const auto DMPAPER_CSHEET = 24; /* C size sheet */
  1828. const auto DMPAPER_DSHEET = 25; /* D size sheet */
  1829. const auto DMPAPER_ESHEET = 26; /* E size sheet */
  1830. const auto DMPAPER_ENV_DL = 27; /* Envelope DL 110 x 220mm */
  1831. const auto DMPAPER_ENV_C5 = 28; /* Envelope C5 162 x 229 mm */
  1832. const auto DMPAPER_ENV_C3 = 29; /* Envelope C3 324 x 458 mm */
  1833. const auto DMPAPER_ENV_C4 = 30; /* Envelope C4 229 x 324 mm */
  1834. const auto DMPAPER_ENV_C6 = 31; /* Envelope C6 114 x 162 mm */
  1835. const auto DMPAPER_ENV_C65 = 32; /* Envelope C65 114 x 229 mm */
  1836. const auto DMPAPER_ENV_B4 = 33; /* Envelope B4 250 x 353 mm */
  1837. const auto DMPAPER_ENV_B5 = 34; /* Envelope B5 176 x 250 mm */
  1838. const auto DMPAPER_ENV_B6 = 35; /* Envelope B6 176 x 125 mm */
  1839. const auto DMPAPER_ENV_ITALY = 36; /* Envelope 110 x 230 mm */
  1840. const auto DMPAPER_ENV_MONARCH = 37; /* Envelope Monarch 3.875 x 7.5 in */
  1841. const auto DMPAPER_ENV_PERSONAL = 38; /* 6 3/4 Envelope 3 5/8 x 6 1/2 in */
  1842. const auto DMPAPER_FANFOLD_US = 39; /* US Std Fanfold 14 7/8 x 11 in */
  1843. const auto DMPAPER_FANFOLD_STD_GERMAN = 40; /* German Std Fanfold 8 1/2 x 12 in */
  1844. const auto DMPAPER_FANFOLD_LGL_GERMAN = 41; /* German Legal Fanfold 8 1/2 x 13 in */
  1845. const auto DMPAPER_ISO_B4 = 42; /* B4 (ISO) 250 x 353 mm */
  1846. const auto DMPAPER_JAPANESE_POSTCARD = 43; /* Japanese Postcard 100 x 148 mm */
  1847. const auto DMPAPER_9X11 = 44; /* 9 x 11 in */
  1848. const auto DMPAPER_10X11 = 45; /* 10 x 11 in */
  1849. const auto DMPAPER_15X11 = 46; /* 15 x 11 in */
  1850. const auto DMPAPER_ENV_INVITE = 47; /* Envelope Invite 220 x 220 mm */
  1851. const auto DMPAPER_RESERVED_48 = 48; /* RESERVED--DO NOT USE */
  1852. const auto DMPAPER_RESERVED_49 = 49; /* RESERVED--DO NOT USE */
  1853. const auto DMPAPER_LETTER_EXTRA = 50; /* Letter Extra 9 \275 x 12 in */
  1854. const auto DMPAPER_LEGAL_EXTRA = 51; /* Legal Extra 9 \275 x 15 in */
  1855. const auto DMPAPER_TABLOID_EXTRA = 52; /* Tabloid Extra 11.69 x 18 in */
  1856. const auto DMPAPER_A4_EXTRA = 53; /* A4 Extra 9.27 x 12.69 in */
  1857. const auto DMPAPER_LETTER_TRANSVERSE = 54; /* Letter Transverse 8 \275 x 11 in */
  1858. const auto DMPAPER_A4_TRANSVERSE = 55; /* A4 Transverse 210 x 297 mm */
  1859. const auto DMPAPER_LETTER_EXTRA_TRANSVERSE = 56; /* Letter Extra Transverse 9\275 x 12 in */
  1860. const auto DMPAPER_A_PLUS = 57; /* SuperA/SuperA/A4 227 x 356 mm */
  1861. const auto DMPAPER_B_PLUS = 58; /* SuperB/SuperB/A3 305 x 487 mm */
  1862. const auto DMPAPER_LETTER_PLUS = 59; /* Letter Plus 8.5 x 12.69 in */
  1863. const auto DMPAPER_A4_PLUS = 60; /* A4 Plus 210 x 330 mm */
  1864. const auto DMPAPER_A5_TRANSVERSE = 61; /* A5 Transverse 148 x 210 mm */
  1865. const auto DMPAPER_B5_TRANSVERSE = 62; /* B5 (JIS) Transverse 182 x 257 mm */
  1866. const auto DMPAPER_A3_EXTRA = 63; /* A3 Extra 322 x 445 mm */
  1867. const auto DMPAPER_A5_EXTRA = 64; /* A5 Extra 174 x 235 mm */
  1868. const auto DMPAPER_B5_EXTRA = 65; /* B5 (ISO) Extra 201 x 276 mm */
  1869. const auto DMPAPER_A2 = 66; /* A2 420 x 594 mm */
  1870. const auto DMPAPER_A3_TRANSVERSE = 67; /* A3 Transverse 297 x 420 mm */
  1871. const auto DMPAPER_A3_EXTRA_TRANSVERSE = 68; /* A3 Extra Transverse 322 x 445 mm */
  1872. const auto DMPAPER_DBL_JAPANESE_POSTCARD = 69; /* Japanese Double Postcard 200 x 148 mm */
  1873. const auto DMPAPER_A6 = 70; /* A6 105 x 148 mm */
  1874. const auto DMPAPER_JENV_KAKU2 = 71; /* Japanese Envelope Kaku #2 */
  1875. const auto DMPAPER_JENV_KAKU3 = 72; /* Japanese Envelope Kaku #3 */
  1876. const auto DMPAPER_JENV_CHOU3 = 73; /* Japanese Envelope Chou #3 */
  1877. const auto DMPAPER_JENV_CHOU4 = 74; /* Japanese Envelope Chou #4 */
  1878. const auto DMPAPER_LETTER_ROTATED = 75; /* Letter Rotated 11 x 8 1/2 11 in */
  1879. const auto DMPAPER_A3_ROTATED = 76; /* A3 Rotated 420 x 297 mm */
  1880. const auto DMPAPER_A4_ROTATED = 77; /* A4 Rotated 297 x 210 mm */
  1881. const auto DMPAPER_A5_ROTATED = 78; /* A5 Rotated 210 x 148 mm */
  1882. const auto DMPAPER_B4_JIS_ROTATED = 79; /* B4 (JIS) Rotated 364 x 257 mm */
  1883. const auto DMPAPER_B5_JIS_ROTATED = 80; /* B5 (JIS) Rotated 257 x 182 mm */
  1884. const auto DMPAPER_JAPANESE_POSTCARD_ROTATED = 81; /* Japanese Postcard Rotated 148 x 100 mm */
  1885. const auto DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 82; /* Double Japanese Postcard Rotated 148 x 200 mm */
  1886. const auto DMPAPER_A6_ROTATED = 83; /* A6 Rotated 148 x 105 mm */
  1887. const auto DMPAPER_JENV_KAKU2_ROTATED = 84; /* Japanese Envelope Kaku #2 Rotated */
  1888. const auto DMPAPER_JENV_KAKU3_ROTATED = 85; /* Japanese Envelope Kaku #3 Rotated */
  1889. const auto DMPAPER_JENV_CHOU3_ROTATED = 86; /* Japanese Envelope Chou #3 Rotated */
  1890. const auto DMPAPER_JENV_CHOU4_ROTATED = 87; /* Japanese Envelope Chou #4 Rotated */
  1891. const auto DMPAPER_B6_JIS = 88; /* B6 (JIS) 128 x 182 mm */
  1892. const auto DMPAPER_B6_JIS_ROTATED = 89; /* B6 (JIS) Rotated 182 x 128 mm */
  1893. const auto DMPAPER_12X11 = 90; /* 12 x 11 in */
  1894. const auto DMPAPER_JENV_YOU4 = 91; /* Japanese Envelope You #4 */
  1895. const auto DMPAPER_JENV_YOU4_ROTATED = 92; /* Japanese Envelope You #4 Rotated*/
  1896. const auto DMPAPER_P16K = 93; /* PRC 16K 146 x 215 mm */
  1897. const auto DMPAPER_P32K = 94; /* PRC 32K 97 x 151 mm */
  1898. const auto DMPAPER_P32KBIG = 95; /* PRC 32K(Big) 97 x 151 mm */
  1899. const auto DMPAPER_PENV_1 = 96; /* PRC Envelope #1 102 x 165 mm */
  1900. const auto DMPAPER_PENV_2 = 97; /* PRC Envelope #2 102 x 176 mm */
  1901. const auto DMPAPER_PENV_3 = 98; /* PRC Envelope #3 125 x 176 mm */
  1902. const auto DMPAPER_PENV_4 = 99; /* PRC Envelope #4 110 x 208 mm */
  1903. const auto DMPAPER_PENV_5 = 100; /* PRC Envelope #5 110 x 220 mm */
  1904. const auto DMPAPER_PENV_6 = 101; /* PRC Envelope #6 120 x 230 mm */
  1905. const auto DMPAPER_PENV_7 = 102; /* PRC Envelope #7 160 x 230 mm */
  1906. const auto DMPAPER_PENV_8 = 103; /* PRC Envelope #8 120 x 309 mm */
  1907. const auto DMPAPER_PENV_9 = 104; /* PRC Envelope #9 229 x 324 mm */
  1908. const auto DMPAPER_PENV_10 = 105; /* PRC Envelope #10 324 x 458 mm */
  1909. const auto DMPAPER_P16K_ROTATED = 106; /* PRC 16K Rotated */
  1910. const auto DMPAPER_P32K_ROTATED = 107; /* PRC 32K Rotated */
  1911. const auto DMPAPER_P32KBIG_ROTATED = 108; /* PRC 32K(Big) Rotated */
  1912. const auto DMPAPER_PENV_1_ROTATED = 109; /* PRC Envelope #1 Rotated 165 x 102 mm */
  1913. const auto DMPAPER_PENV_2_ROTATED = 110; /* PRC Envelope #2 Rotated 176 x 102 mm */
  1914. const auto DMPAPER_PENV_3_ROTATED = 111; /* PRC Envelope #3 Rotated 176 x 125 mm */
  1915. const auto DMPAPER_PENV_4_ROTATED = 112; /* PRC Envelope #4 Rotated 208 x 110 mm */
  1916. const auto DMPAPER_PENV_5_ROTATED = 113; /* PRC Envelope #5 Rotated 220 x 110 mm */
  1917. const auto DMPAPER_PENV_6_ROTATED = 114; /* PRC Envelope #6 Rotated 230 x 120 mm */
  1918. const auto DMPAPER_PENV_7_ROTATED = 115; /* PRC Envelope #7 Rotated 230 x 160 mm */
  1919. const auto DMPAPER_PENV_8_ROTATED = 116; /* PRC Envelope #8 Rotated 309 x 120 mm */
  1920. const auto DMPAPER_PENV_9_ROTATED = 117; /* PRC Envelope #9 Rotated 324 x 229 mm */
  1921. const auto DMPAPER_PENV_10_ROTATED = 118; /* PRC Envelope #10 Rotated 458 x 324 mm */
  1922. const auto DMPAPER_LAST = DMPAPER_PENV_10_ROTATED;
  1923. const auto DMPAPER_USER = 256;
  1924. /* bin selections */
  1925. const auto DMBIN_UPPER = 1;
  1926. const auto DMBIN_FIRST = DMBIN_UPPER;
  1927. const auto DMBIN_ONLYONE = 1;
  1928. const auto DMBIN_LOWER = 2;
  1929. const auto DMBIN_MIDDLE = 3;
  1930. const auto DMBIN_MANUAL = 4;
  1931. const auto DMBIN_ENVELOPE = 5;
  1932. const auto DMBIN_ENVMANUAL = 6;
  1933. const auto DMBIN_AUTO = 7;
  1934. const auto DMBIN_TRACTOR = 8;
  1935. const auto DMBIN_SMALLFMT = 9;
  1936. const auto DMBIN_LARGEFMT = 10;
  1937. const auto DMBIN_LARGECAPACITY = 11;
  1938. const auto DMBIN_CASSETTE = 14;
  1939. const auto DMBIN_FORMSOURCE = 15;
  1940. const auto DMBIN_LAST = DMBIN_FORMSOURCE;
  1941. const auto DMBIN_USER = 256; /* device specific bins start here */
  1942. /* print qualities */
  1943. const auto DMRES_DRAFT = (-1);
  1944. const auto DMRES_LOW = (-2);
  1945. const auto DMRES_MEDIUM = (-3);
  1946. const auto DMRES_HIGH = (-4);
  1947. /* color enable/disable for color printers */
  1948. const auto DMCOLOR_MONOCHROME = 1;
  1949. const auto DMCOLOR_COLOR = 2;
  1950. /* duplex enable */
  1951. const auto DMDUP_SIMPLEX = 1;
  1952. const auto DMDUP_VERTICAL = 2;
  1953. const auto DMDUP_HORIZONTAL = 3;
  1954. /* TrueType options */
  1955. const auto DMTT_BITMAP = 1; /* print TT fonts as graphics */
  1956. const auto DMTT_DOWNLOAD = 2; /* download TT fonts as soft fonts */
  1957. const auto DMTT_SUBDEV = 3; /* substitute device fonts for TT fonts */
  1958. const auto DMTT_DOWNLOAD_OUTLINE = 4; /* download TT fonts as outline soft fonts */
  1959. /* Collation selections */
  1960. const auto DMCOLLATE_FALSE = 0;
  1961. const auto DMCOLLATE_TRUE = 1;
  1962. /* DEVMODE dmDisplayOrientation specifiations */
  1963. const auto DMDO_DEFAULT = 0;
  1964. const auto DMDO_90 = 1;
  1965. const auto DMDO_180 = 2;
  1966. const auto DMDO_270 = 3;
  1967. /* DEVMODE dmDisplayFixedOutput specifiations */
  1968. const auto DMDFO_DEFAULT = 0;
  1969. const auto DMDFO_STRETCH = 1;
  1970. const auto DMDFO_CENTER = 2;
  1971. /* DEVMODE dmDisplayFlags flags */
  1972. // const auto DM_GRAYSCALE 0x00000001 /* This flag is no longer valid */
  1973. const auto DM_INTERLACED = 0x00000002;
  1974. const auto DMDISPLAYFLAGS_TEXTMODE = 0x00000004;
  1975. /* dmNup , multiple logical page per physical page options */
  1976. const auto DMNUP_SYSTEM = 1;
  1977. const auto DMNUP_ONEUP = 2;
  1978. /* ICM methods */
  1979. const auto DMICMMETHOD_NONE = 1; /* ICM disabled */
  1980. const auto DMICMMETHOD_SYSTEM = 2; /* ICM handled by system */
  1981. const auto DMICMMETHOD_DRIVER = 3; /* ICM handled by driver */
  1982. const auto DMICMMETHOD_DEVICE = 4; /* ICM handled by device */
  1983. const auto DMICMMETHOD_USER = 256; /* Device-specific methods start here */
  1984. /* ICM Intents */
  1985. const auto DMICM_SATURATE = 1; /* Maximize color saturation */
  1986. const auto DMICM_CONTRAST = 2; /* Maximize color contrast */
  1987. const auto DMICM_COLORIMETRIC = 3; /* Use specific color metric */
  1988. const auto DMICM_ABS_COLORIMETRIC = 4; /* Use specific color metric */
  1989. const auto DMICM_USER = 256; /* Device-specific intents start here */
  1990. /* Media types */
  1991. const auto DMMEDIA_STANDARD = 1; /* Standard paper */
  1992. const auto DMMEDIA_TRANSPARENCY = 2; /* Transparency */
  1993. const auto DMMEDIA_GLOSSY = 3; /* Glossy paper */
  1994. const auto DMMEDIA_USER = 256; /* Device-specific media start here */
  1995. /* Dither types */
  1996. const auto DMDITHER_NONE = 1; /* No dithering */
  1997. const auto DMDITHER_COARSE = 2; /* Dither with a coarse brush */
  1998. const auto DMDITHER_FINE = 3; /* Dither with a fine brush */
  1999. const auto DMDITHER_LINEART = 4; /* LineArt dithering */
  2000. const auto DMDITHER_ERRORDIFFUSION = 5; /* LineArt dithering */
  2001. const auto DMDITHER_RESERVED6 = 6; /* LineArt dithering */
  2002. const auto DMDITHER_RESERVED7 = 7; /* LineArt dithering */
  2003. const auto DMDITHER_RESERVED8 = 8; /* LineArt dithering */
  2004. const auto DMDITHER_RESERVED9 = 9; /* LineArt dithering */
  2005. const auto DMDITHER_GRAYSCALE = 10; /* Device does grayscaling */
  2006. const auto DMDITHER_USER = 256; /* Device-specific dithers start here */
  2007. struct DISPLAY_DEVICEA {
  2008. DWORD cb;
  2009. CHAR[32] DeviceName;
  2010. CHAR[128] DeviceString;
  2011. DWORD StateFlags;
  2012. CHAR[128] DeviceID;
  2013. CHAR[128] DeviceKey;
  2014. }
  2015. typedef DISPLAY_DEVICEA* PDISPLAY_DEVICEA;
  2016. typedef DISPLAY_DEVICEA* LPDISPLAY_DEVICEA;
  2017. struct DISPLAY_DEVICEW {
  2018. DWORD cb;
  2019. WCHAR[32] DeviceName;
  2020. WCHAR[128] DeviceString;
  2021. DWORD StateFlags;
  2022. WCHAR[128] DeviceID;
  2023. WCHAR[128] DeviceKey;
  2024. }
  2025. typedef DISPLAY_DEVICEW* PDISPLAY_DEVICEW;
  2026. typedef DISPLAY_DEVICEW* LPDISPLAY_DEVICEW;
  2027. version(UNICODE) {
  2028. typedef DISPLAY_DEVICEW DISPLAY_DEVICE;
  2029. typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE;
  2030. typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE;
  2031. }
  2032. else {
  2033. typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
  2034. typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
  2035. typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
  2036. }
  2037. const auto DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x00000001;
  2038. const auto DISPLAY_DEVICE_MULTI_DRIVER = 0x00000002;
  2039. const auto DISPLAY_DEVICE_PRIMARY_DEVICE = 0x00000004;
  2040. const auto DISPLAY_DEVICE_MIRRORING_DRIVER = 0x00000008;
  2041. const auto DISPLAY_DEVICE_VGA_COMPATIBLE = 0x00000010;
  2042. const auto DISPLAY_DEVICE_REMOVABLE = 0x00000020;
  2043. const auto DISPLAY_DEVICE_MODESPRUNED = 0x08000000;
  2044. const auto DISPLAY_DEVICE_REMOTE = 0x04000000;
  2045. const auto DISPLAY_DEVICE_DISCONNECT = 0x02000000;
  2046. const auto DISPLAY_DEVICE_TS_COMPATIBLE = 0x00200000;
  2047. const auto DISPLAY_DEVICE_UNSAFE_MODES_ON = 0x00080000;
  2048. /* Child device state */
  2049. const auto DISPLAY_DEVICE_ACTIVE = 0x00000001;
  2050. const auto DISPLAY_DEVICE_ATTACHED = 0x00000002;
  2051. /* GetRegionData/ExtCreateRegion */
  2052. const auto RDH_RECTANGLES = 1;
  2053. struct RGNDATAHEADER {
  2054. DWORD dwSize;
  2055. DWORD iType;
  2056. DWORD nCount;
  2057. DWORD nRgnSize;
  2058. RECT rcBound;
  2059. }
  2060. typedef RGNDATAHEADER* PRGNDATAHEADER;
  2061. struct RGNDATA {
  2062. RGNDATAHEADER rdh;
  2063. char[1] Buffer;
  2064. }
  2065. typedef RGNDATA* PRGNDATA;
  2066. typedef RGNDATA* LPRGNDATA;
  2067. typedef RGNDATA* NPRGNDATA;
  2068. /* for GetRandomRgn */
  2069. const auto SYSRGN = 4;
  2070. struct ABC {
  2071. int abcA;
  2072. UINT abcB;
  2073. int abcC;
  2074. }
  2075. typedef ABC* PABC;
  2076. typedef ABC* NPABC;
  2077. typedef ABC* LPABC;
  2078. struct ABCFLOAT {
  2079. FLOAT abcfA;
  2080. FLOAT abcfB;
  2081. FLOAT abcfC;
  2082. }
  2083. typedef ABCFLOAT* PABCFLOAT;
  2084. typedef ABCFLOAT* NPABCFLOAT;
  2085. typedef ABCFLOAT* LPABCFLOAT;
  2086. align(4) struct OUTLINETEXTMETRICA {
  2087. UINT otmSize;
  2088. TEXTMETRICA otmTextMetrics;
  2089. BYTE otmFiller;
  2090. PANOSE otmPanoseNumber;
  2091. UINT otmfsSelection;
  2092. UINT otmfsType;
  2093. int otmsCharSlopeRise;
  2094. int otmsCharSlopeRun;
  2095. int otmItalicAngle;
  2096. UINT otmEMSquare;
  2097. int otmAscent;
  2098. int otmDescent;
  2099. UINT otmLineGap;
  2100. UINT otmsCapEmHeight;
  2101. UINT otmsXHeight;
  2102. RECT otmrcFontBox;
  2103. int otmMacAscent;
  2104. int otmMacDescent;
  2105. UINT otmMacLineGap;
  2106. UINT otmusMinimumPPEM;
  2107. POINT otmptSubscriptSize;
  2108. POINT otmptSubscriptOffset;
  2109. POINT otmptSuperscriptSize;
  2110. POINT otmptSuperscriptOffset;
  2111. UINT otmsStrikeoutSize;
  2112. int otmsStrikeoutPosition;
  2113. int otmsUnderscoreSize;
  2114. int otmsUnderscorePosition;
  2115. PSTR otmpFamilyName;
  2116. PSTR otmpFaceName;
  2117. PSTR otmpStyleName;
  2118. PSTR otmpFullName;
  2119. }
  2120. typedef OUTLINETEXTMETRICA* POUTLINETEXTMETRICA;
  2121. typedef OUTLINETEXTMETRICA* NPOUTLINETEXTMETRICA;
  2122. typedef OUTLINETEXTMETRICA* LPOUTLINETEXTMETRICA;
  2123. align(4) struct OUTLINETEXTMETRICW {
  2124. UINT otmSize;
  2125. TEXTMETRICW otmTextMetrics;
  2126. BYTE otmFiller;
  2127. PANOSE otmPanoseNumber;
  2128. UINT otmfsSelection;
  2129. UINT otmfsType;
  2130. int otmsCharSlopeRise;
  2131. int otmsCharSlopeRun;
  2132. int otmItalicAngle;
  2133. UINT otmEMSquare;
  2134. int otmAscent;
  2135. int otmDescent;
  2136. UINT otmLineGap;
  2137. UINT otmsCapEmHeight;
  2138. UINT otmsXHeight;
  2139. RECT otmrcFontBox;
  2140. int otmMacAscent;
  2141. int otmMacDescent;
  2142. UINT otmMacLineGap;
  2143. UINT otmusMinimumPPEM;
  2144. POINT otmptSubscriptSize;
  2145. POINT otmptSubscriptOffset;
  2146. POINT otmptSuperscriptSize;
  2147. POINT otmptSuperscriptOffset;
  2148. UINT otmsStrikeoutSize;
  2149. int otmsStrikeoutPosition;
  2150. int otmsUnderscoreSize;
  2151. int otmsUnderscorePosition;
  2152. PSTR otmpFamilyName;
  2153. PSTR otmpFaceName;
  2154. PSTR otmpStyleName;
  2155. PSTR otmpFullName;
  2156. }
  2157. typedef OUTLINETEXTMETRICW* POUTLINETEXTMETRICW;
  2158. typedef OUTLINETEXTMETRICW* NPOUTLINETEXTMETRICW;
  2159. typedef OUTLINETEXTMETRICW* LPOUTLINETEXTMETRICW;
  2160. version(UNICODE) {
  2161. typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
  2162. typedef POUTLINETEXTMETRICW POUTLINETEXTMETRIC;
  2163. typedef NPOUTLINETEXTMETRICW NPOUTLINETEXTMETRIC;
  2164. typedef LPOUTLINETEXTMETRICW LPOUTLINETEXTMETRIC;
  2165. }
  2166. else {
  2167. typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
  2168. typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
  2169. typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
  2170. typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
  2171. }
  2172. struct POLYTEXTA {
  2173. int x;
  2174. int y;
  2175. UINT n;
  2176. LPCSTR lpstr;
  2177. UINT uiFlags;
  2178. RECT rcl;
  2179. int *pdx;
  2180. }
  2181. typedef POLYTEXTA* PPOLYTEXTA;
  2182. typedef POLYTEXTA* NPPOLYTEXTA;
  2183. typedef POLYTEXTA* LPPOLYTEXTA;
  2184. struct POLYTEXTW {
  2185. int x;
  2186. int y;
  2187. UINT n;
  2188. LPCWSTR lpstr;
  2189. UINT uiFlags;
  2190. RECT rcl;
  2191. int *pdx;
  2192. }
  2193. typedef POLYTEXTW* PPOLYTEXTW;
  2194. typedef POLYTEXTW* NPPOLYTEXTW;
  2195. typedef POLYTEXTW* LPPOLYTEXTW;
  2196. version(UNICODE) {
  2197. typedef POLYTEXTW POLYTEXT;
  2198. typedef PPOLYTEXTW PPOLYTEXT;
  2199. typedef NPPOLYTEXTW NPPOLYTEXT;
  2200. typedef LPPOLYTEXTW LPPOLYTEXT;
  2201. }
  2202. else {
  2203. typedef POLYTEXTA POLYTEXT;
  2204. typedef PPOLYTEXTA PPOLYTEXT;
  2205. typedef NPPOLYTEXTA NPPOLYTEXT;
  2206. typedef LPPOLYTEXTA LPPOLYTEXT;
  2207. }
  2208. struct FIXED {
  2209. short value;
  2210. WORD fract;
  2211. }
  2212. struct MAT2 {
  2213. FIXED eM11;
  2214. FIXED eM12;
  2215. FIXED eM21;
  2216. FIXED eM22;
  2217. }
  2218. typedef MAT2* LPMAT2;
  2219. struct GLYPHMETRICS {
  2220. UINT gmBlackBoxX;
  2221. UINT gmBlackBoxY;
  2222. POINT gmptGlyphOrigin;
  2223. short gmCellIncX;
  2224. short gmCellIncY;
  2225. }
  2226. typedef GLYPHMETRICS* LPGLYPHMETRICS;
  2227. // GetGlyphOutline constants
  2228. const auto GGO_METRICS = 0;
  2229. const auto GGO_BITMAP = 1;
  2230. const auto GGO_NATIVE = 2;
  2231. const auto GGO_BEZIER = 3;
  2232. const auto GGO_GRAY2_BITMAP = 4;
  2233. const auto GGO_GRAY4_BITMAP = 5;
  2234. const auto GGO_GRAY8_BITMAP = 6;
  2235. const auto GGO_GLYPH_INDEX = 0x0080;
  2236. const auto GGO_UNHINTED = 0x0100;
  2237. const auto TT_POLYGON_TYPE = 24;
  2238. const auto TT_PRIM_LINE = 1;
  2239. const auto TT_PRIM_QSPLINE = 2;
  2240. const auto TT_PRIM_CSPLINE = 3;
  2241. struct POINTFX {
  2242. FIXED x;
  2243. FIXED y;
  2244. }
  2245. typedef POINTFX* LPPOINTFX;
  2246. struct TTPOLYCURVE {
  2247. WORD wType;
  2248. WORD cpfx;
  2249. POINTFX[1] apfx;
  2250. }
  2251. typedef TTPOLYCURVE* LPTTPOLYCURVE;
  2252. struct TTPOLYGONHEADER {
  2253. DWORD cb;
  2254. DWORD dwType;
  2255. POINTFX pfxStart;
  2256. }
  2257. typedef TTPOLYGONHEADER* LPTTPOLYGONHEADER;
  2258. const auto GCP_DBCS = 0x0001;
  2259. const auto GCP_REORDER = 0x0002;
  2260. const auto GCP_USEKERNING = 0x0008;
  2261. const auto GCP_GLYPHSHAPE = 0x0010;
  2262. const auto GCP_LIGATE = 0x0020;
  2263. ////const auto GCP_GLYPHINDEXING 0x0080
  2264. const auto GCP_DIACRITIC = 0x0100;
  2265. const auto GCP_KASHIDA = 0x0400;
  2266. const auto GCP_ERROR = 0x8000;
  2267. const auto FLI_MASK = 0x103B;
  2268. const auto GCP_JUSTIFY = 0x00010000;
  2269. ////const auto GCP_NODIACRITICS 0x00020000L
  2270. const auto FLI_GLYPHS = 0x00040000L;
  2271. const auto GCP_CLASSIN = 0x00080000L;
  2272. const auto GCP_MAXEXTENT = 0x00100000L;
  2273. const auto GCP_JUSTIFYIN = 0x00200000L;
  2274. const auto GCP_DISPLAYZWG = 0x00400000L;
  2275. const auto GCP_SYMSWAPOFF = 0x00800000L;
  2276. const auto GCP_NUMERICOVERRIDE = 0x01000000L;
  2277. const auto GCP_NEUTRALOVERRIDE = 0x02000000L;
  2278. const auto GCP_NUMERICSLATIN = 0x04000000L;
  2279. const auto GCP_NUMERICSLOCAL = 0x08000000L;
  2280. const auto GCPCLASS_LATIN = 1;
  2281. const auto GCPCLASS_HEBREW = 2;
  2282. const auto GCPCLASS_ARABIC = 2;
  2283. const auto GCPCLASS_NEUTRAL = 3;
  2284. const auto GCPCLASS_LOCALNUMBER = 4;
  2285. const auto GCPCLASS_LATINNUMBER = 5;
  2286. const auto GCPCLASS_LATINNUMERICTERMINATOR = 6;
  2287. const auto GCPCLASS_LATINNUMERICSEPARATOR = 7;
  2288. const auto GCPCLASS_NUMERICSEPARATOR = 8;
  2289. const auto GCPCLASS_PREBOUNDLTR = 0x80;
  2290. const auto GCPCLASS_PREBOUNDRTL = 0x40;
  2291. const auto GCPCLASS_POSTBOUNDLTR = 0x20;
  2292. const auto GCPCLASS_POSTBOUNDRTL = 0x10;
  2293. const auto GCPGLYPH_LINKBEFORE = 0x8000;
  2294. const auto GCPGLYPH_LINKAFTER = 0x4000;
  2295. struct GCP_RESULTSA {
  2296. DWORD lStructSize;
  2297. LPSTR lpOutString;
  2298. UINT *lpOrder;
  2299. int *lpDx;
  2300. int *lpCaretPos;
  2301. LPSTR lpClass;
  2302. LPWSTR lpGlyphs;
  2303. UINT nGlyphs;
  2304. int nMaxFit;
  2305. }
  2306. typedef GCP_RESULTSA* LPGCP_RESULTSA;
  2307. struct GCP_RESULTSW {
  2308. DWORD lStructSize;
  2309. LPWSTR lpOutString;
  2310. UINT *lpOrder;
  2311. int *lpDx;
  2312. int *lpCaretPos;
  2313. LPSTR lpClass;
  2314. LPWSTR lpGlyphs;
  2315. UINT nGlyphs;
  2316. int nMaxFit;
  2317. }
  2318. typedef GCP_RESULTSW* LPGCP_RESULTSW;
  2319. version(UNICODE) {
  2320. typedef GCP_RESULTSW GCP_RESULTS;
  2321. typedef LPGCP_RESULTSW LPGCP_RESULTS;
  2322. }
  2323. else {
  2324. typedef GCP_RESULTSA GCP_RESULTS;
  2325. typedef LPGCP_RESULTSA LPGCP_RESULTS;
  2326. }
  2327. struct RASTERIZER_STATUS {
  2328. short nSize;
  2329. short wFlags;
  2330. short nLanguageID;
  2331. }
  2332. typedef RASTERIZER_STATUS* LPRASTERIZER_STATUS;
  2333. /* bits defined in wFlags of RASTERIZER_STATUS */
  2334. const auto TT_AVAILABLE = 0x0001;
  2335. const auto TT_ENABLED = 0x0002;
  2336. /* Pixel format descriptor */
  2337. struct PIXELFORMATDESCRIPTOR {
  2338. WORD nSize;
  2339. WORD nVersion;
  2340. DWORD dwFlags;
  2341. BYTE iPixelType;
  2342. BYTE cColorBits;
  2343. BYTE cRedBits;
  2344. BYTE cRedShift;
  2345. BYTE cGreenBits;
  2346. BYTE cGreenShift;
  2347. BYTE cBlueBits;
  2348. BYTE cBlueShift;
  2349. BYTE cAlphaBits;
  2350. BYTE cAlphaShift;
  2351. BYTE cAccumBits;
  2352. BYTE cAccumRedBits;
  2353. BYTE cAccumGreenBits;
  2354. BYTE cAccumBlueBits;
  2355. BYTE cAccumAlphaBits;
  2356. BYTE cDepthBits;
  2357. BYTE cStencilBits;
  2358. BYTE cAuxBuffers;
  2359. BYTE iLayerType;
  2360. BYTE bReserved;
  2361. DWORD dwLayerMask;
  2362. DWORD dwVisibleMask;
  2363. DWORD dwDamageMask;
  2364. }
  2365. typedef PIXELFORMATDESCRIPTOR* PPIXELFORMATDESCRIPTOR;
  2366. typedef PIXELFORMATDESCRIPTOR* LPPIXELFORMATDESCRIPTOR;
  2367. /* pixel types */
  2368. const auto PFD_TYPE_RGBA = 0;
  2369. const auto PFD_TYPE_COLORINDEX = 1;
  2370. /* layer types */
  2371. const auto PFD_MAIN_PLANE = 0;
  2372. const auto PFD_OVERLAY_PLANE = 1;
  2373. const auto PFD_UNDERLAY_PLANE = (-1);
  2374. /* PIXELFORMATDESCRIPTOR flags */
  2375. const auto PFD_DOUBLEBUFFER = 0x00000001;
  2376. const auto PFD_STEREO = 0x00000002;
  2377. const auto PFD_DRAW_TO_WINDOW = 0x00000004;
  2378. const auto PFD_DRAW_TO_BITMAP = 0x00000008;
  2379. const auto PFD_SUPPORT_GDI = 0x00000010;
  2380. const auto PFD_SUPPORT_OPENGL = 0x00000020;
  2381. const auto PFD_GENERIC_FORMAT = 0x00000040;
  2382. const auto PFD_NEED_PALETTE = 0x00000080;
  2383. const auto PFD_NEED_SYSTEM_PALETTE = 0x00000100;
  2384. const auto PFD_SWAP_EXCHANGE = 0x00000200;
  2385. const auto PFD_SWAP_COPY = 0x00000400;
  2386. const auto PFD_SWAP_LAYER_BUFFERS = 0x00000800;
  2387. const auto PFD_GENERIC_ACCELERATED = 0x00001000;
  2388. const auto PFD_SUPPORT_DIRECTDRAW = 0x00002000;
  2389. const auto PFD_DIRECT3D_ACCELERATED = 0x00004000;
  2390. const auto PFD_SUPPORT_COMPOSITION = 0x00008000;
  2391. /* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */
  2392. const auto PFD_DEPTH_DONTCARE = 0x20000000;
  2393. const auto PFD_DOUBLEBUFFER_DONTCARE = 0x40000000;
  2394. const auto PFD_STEREO_DONTCARE = 0x80000000;
  2395. typedef int function(LOGFONTA*, TEXTMETRICA*, DWORD, LPARAM) OLDFONTENUMPROCA;
  2396. typedef int function(LOGFONTW*, TEXTMETRICW*, DWORD, LPARAM) OLDFONTENUMPROCW;
  2397. version (UNICODE) {
  2398. alias OLDFONTENUMPROCW OLDFONTENUMPROC;
  2399. }
  2400. else {
  2401. alias OLDFONTENUMPROCA OLDFONTENUMPROC;
  2402. }
  2403. typedef OLDFONTENUMPROCA FONTENUMPROCA;
  2404. typedef OLDFONTENUMPROCW FONTENUMPROCW;
  2405. version (UNICODE) {
  2406. typedef FONTENUMPROCW FONTENUMPROC;
  2407. }
  2408. else {
  2409. typedef FONTENUMPROCA FONTENUMPROC;
  2410. }
  2411. typedef int function (LPVOID, LPARAM) GOBJENUMPROC;
  2412. typedef VOID function(int, int, LPARAM) LINEDDAPROC;
  2413. int AddFontResourceA(LPCSTR);
  2414. int AddFontResourceW(LPCWSTR);
  2415. version (UNICODE) {
  2416. alias AddFontResourceW AddFontResource;
  2417. }
  2418. else {
  2419. alias AddFontResourceA AddFontResource;
  2420. }
  2421. BOOL AnimatePalette(HPALETTE hPal, UINT iStartIndex, UINT cEntries, PALETTEENTRY* ppe);
  2422. BOOL Arc(HDC hdc,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
  2423. BOOL BitBlt(HDC hdc,int x,int y,int cx,int cy,HDC hdcSrc,int x1,int y1,DWORD rop);
  2424. BOOL CancelDC(HDC hdc);
  2425. BOOL Chord(HDC hdc,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
  2426. int ChoosePixelFormat(HDC hdc,PIXELFORMATDESCRIPTOR *ppfd);
  2427. HMETAFILE CloseMetaFile(HDC hdc);
  2428. int CombineRgn(HRGN hrgnDst,HRGN hrgnSrc1,HRGN hrgnSrc2,int iMode);
  2429. HMETAFILE CopyMetaFileA(HMETAFILE,LPCSTR);
  2430. HMETAFILE CopyMetaFileW(HMETAFILE,LPCWSTR);
  2431. version(UNICODE) {
  2432. alias CopyMetaFileW CopyMetaFile;
  2433. }
  2434. else {
  2435. alias CopyMetaFileA CopyMetaFile;
  2436. }
  2437. HBITMAP CreateBitmap(int nWidth,int nHeight,UINT nPlanes,UINT nBitCount,VOID *lpBits);
  2438. HBITMAP CreateBitmapIndirect(BITMAP *pbm);
  2439. HBRUSH CreateBrushIndirect(LOGBRUSH *plbrush);
  2440. HBITMAP CreateCompatibleBitmap(HDC hdc,int cx,int cy);
  2441. HBITMAP CreateDiscardableBitmap(HDC hdc,int cx,int cy);
  2442. HDC CreateCompatibleDC(HDC hdc);
  2443. HDC CreateDCA(LPCSTR pwszDriver,LPCSTR pwszDevice,LPCSTR pszPort,DEVMODEA * pdm);
  2444. HDC CreateDCW(LPCWSTR pwszDriver,LPCWSTR pwszDevice,LPCWSTR pszPort,DEVMODEW * pdm);
  2445. version(UNICODE) {
  2446. alias CreateDCW CreateDC;
  2447. }
  2448. else {
  2449. alias CreateDCA CreateDC;
  2450. }
  2451. HBITMAP CreateDIBitmap(HDC hdc,BITMAPINFOHEADER *pbmih,DWORD flInit,VOID *pjBits,BITMAPINFO *pbmi,UINT iUsage);
  2452. HBRUSH CreateDIBPatternBrush(HGLOBAL h,UINT iUsage);
  2453. HBRUSH CreateDIBPatternBrushPt(VOID *lpPackedDIB,UINT iUsage);
  2454. HRGN CreateEllipticRgn(int x1,int y1,int x2,int y2);
  2455. HRGN CreateEllipticRgnIndirect(RECT *lprect);
  2456. HFONT CreateFontIndirectA(LOGFONTA *lplf);
  2457. HFONT CreateFontIndirectW(LOGFONTW *lplf);
  2458. version(UNICODE) {
  2459. alias CreateFontIndirectW CreateFontIndirect;
  2460. }
  2461. else {
  2462. alias CreateFontIndirectA CreateFontIndirect;
  2463. }
  2464. HFONT CreateFontA(int cHeight,int cWidth,int cEscapement,int cOrientation,int cWeight,DWORD bItalic,
  2465. DWORD bUnderline,DWORD bStrikeOut,DWORD iCharSet,DWORD iOutPrecision,DWORD iClipPrecision,
  2466. DWORD iQuality,DWORD iPitchAndFamily,LPCSTR pszFaceName);
  2467. HFONT CreateFontW(int cHeight,int cWidth,int cEscapement,int cOrientation,int cWeight,DWORD bItalic,
  2468. DWORD bUnderline,DWORD bStrikeOut,DWORD iCharSet,DWORD iOutPrecision,DWORD iClipPrecision,
  2469. DWORD iQuality,DWORD iPitchAndFamily,LPCWSTR pszFaceName);
  2470. version(UNICODE) {
  2471. alias CreateFontW CreateFont;
  2472. }
  2473. else {
  2474. alias CreateFontA CreateFont;
  2475. }
  2476. HBRUSH CreateHatchBrush(int iHatch,COLORREF color);
  2477. HDC CreateICA(LPCSTR pszDriver,LPCSTR pszDevice,LPCSTR pszPort,DEVMODEA * pdm);
  2478. HDC CreateICW(LPCWSTR pszDriver,LPCWSTR pszDevice,LPCWSTR pszPort,DEVMODEW * pdm);
  2479. version(UNICODE) {
  2480. alias CreateICW CreateIC;
  2481. }
  2482. else {
  2483. alias CreateICA CreateIC;
  2484. }
  2485. HDC CreateMetaFileA(LPCSTR pszFile);
  2486. HDC CreateMetaFileW(LPCWSTR pszFile);
  2487. version(UNICODE) {
  2488. alias CreateMetaFileW CreateMetaFile;
  2489. }
  2490. else {
  2491. alias CreateMetaFileA CreateMetaFile;
  2492. }
  2493. HPALETTE CreatePalette( LOGPALETTE * plpal);
  2494. HPEN CreatePen(int iStyle,int cWidth,COLORREF color);
  2495. HPEN CreatePenIndirect(LOGPEN *plpen);
  2496. HRGN CreatePolyPolygonRgn( POINT *pptl,
  2497. INT *pc,
  2498. int cPoly,
  2499. int iMode);
  2500. HBRUSH CreatePatternBrush(HBITMAP hbm);
  2501. HRGN CreateRectRgn(int x1,int y1,int x2,int y2);
  2502. HRGN CreateRectRgnIndirect(RECT *lprect);
  2503. HRGN CreateRoundRectRgn(int x1,int y1,int x2,int y2,int w,int h);
  2504. BOOL CreateScalableFontResourceA(DWORD fdwHidden,LPCSTR lpszFont,LPCSTR lpszFile,LPCSTR lpszPath);
  2505. BOOL CreateScalableFontResourceW(DWORD fdwHidden,LPCWSTR lpszFont,LPCWSTR lpszFile,LPCWSTR lpszPath);
  2506. version(UNICODE) {
  2507. alias CreateScalableFontResourceW CreateScalableFontResource;
  2508. }
  2509. else {
  2510. alias CreateScalableFontResourceA CreateScalableFontResource;
  2511. }
  2512. HBRUSH CreateSolidBrush(COLORREF color);
  2513. BOOL DeleteDC(HDC hdc);
  2514. BOOL DeleteMetaFile(HMETAFILE hmf);
  2515. BOOL DeleteObject(HGDIOBJ ho);
  2516. int DescribePixelFormat( HDC hdc,
  2517. int iPixelFormat,
  2518. UINT nBytes,LPPIXELFORMATDESCRIPTOR ppfd);
  2519. /* define types of pointers to ExtDeviceMode() and DeviceCapabilities()
  2520. * functions for Win 3.1 compatibility
  2521. */
  2522. typedef UINT function(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT) LPFNDEVMODE;
  2523. typedef DWORD function(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE) LPFNDEVCAPS;
  2524. /* mode selections for the device mode function */
  2525. // import windef.d:
  2526. /*const auto DM_UPDATE = 1;
  2527. const auto DM_COPY = 2;
  2528. const auto DM_PROMPT = 4;
  2529. const auto DM_MODIFY = 8;*/
  2530. // import windef.d:
  2531. /*const auto DM_IN_BUFFER = DM_MODIFY;
  2532. const auto DM_IN_PROMPT = DM_PROMPT;
  2533. const auto DM_OUT_BUFFER = DM_COPY;
  2534. const auto DM_OUT_DEFAULT = DM_UPDATE;*/
  2535. /* device capabilities indices */
  2536. // import windef.d:
  2537. /*const auto DC_FIELDS = 1;
  2538. const auto DC_PAPERS = 2;
  2539. const auto DC_PAPERSIZE = 3;
  2540. const auto DC_MINEXTENT = 4;
  2541. const auto DC_MAXEXTENT = 5;
  2542. const auto DC_BINS = 6;
  2543. const auto DC_DUPLEX = 7;
  2544. const auto DC_SIZE = 8;
  2545. const auto DC_EXTRA = 9;
  2546. const auto DC_VERSION = 10;
  2547. const auto DC_DRIVER = 11;
  2548. const auto DC_BINNAMES = 12;
  2549. const auto DC_ENUMRESOLUTIONS = 13;
  2550. const auto DC_FILEDEPENDENCIES = 14;
  2551. const auto DC_TRUETYPE = 15;
  2552. const auto DC_PAPERNAMES = 16;
  2553. const auto DC_ORIENTATION = 17;
  2554. const auto DC_COPIES = 18;*/
  2555. const auto DC_BINADJUST = 19;
  2556. const auto DC_EMF_COMPLIANT = 20;
  2557. const auto DC_DATATYPE_PRODUCED = 21;
  2558. const auto DC_COLLATE = 22;
  2559. const auto DC_MANUFACTURER = 23;
  2560. const auto DC_MODEL = 24;
  2561. const auto DC_PERSONALITY = 25;
  2562. const auto DC_PRINTRATE = 26;
  2563. const auto DC_PRINTRATEUNIT = 27;
  2564. const auto PRINTRATEUNIT_PPM = 1;
  2565. const auto PRINTRATEUNIT_CPS = 2;
  2566. const auto PRINTRATEUNIT_LPM = 3;
  2567. const auto PRINTRATEUNIT_IPM = 4;
  2568. const auto DC_PRINTERMEM = 28;
  2569. const auto DC_MEDIAREADY = 29;
  2570. const auto DC_STAPLE = 30;
  2571. const auto DC_PRINTRATEPPM = 31;
  2572. const auto DC_COLORDEVICE = 32;
  2573. const auto DC_NUP = 33;
  2574. const auto DC_MEDIATYPENAMES = 34;
  2575. const auto DC_MEDIATYPES = 35;
  2576. /* bit fields of the return value (DWORD) for DC_TRUETYPE */
  2577. const auto DCTT_BITMAP = 0x0000001L;
  2578. const auto DCTT_DOWNLOAD = 0x0000002L;
  2579. const auto DCTT_SUBDEV = 0x0000004L;
  2580. const auto DCTT_DOWNLOAD_OUTLINE = 0x0000008L;
  2581. /* return values for DC_BINADJUST */
  2582. const auto DCBA_FACEUPNONE = 0x0000;
  2583. const auto DCBA_FACEUPCENTER = 0x0001;
  2584. const auto DCBA_FACEUPLEFT = 0x0002;
  2585. const auto DCBA_FACEUPRIGHT = 0x0003;
  2586. const auto DCBA_FACEDOWNNONE = 0x0100;
  2587. const auto DCBA_FACEDOWNCENTER = 0x0101;
  2588. const auto DCBA_FACEDOWNLEFT = 0x0102;
  2589. const auto DCBA_FACEDOWNRIGHT = 0x0103;
  2590. int DeviceCapabilitiesA(
  2591. LPCSTR pDevice,
  2592. LPCSTR pPort,
  2593. WORD fwCapability,
  2594. LPSTR pOutput,
  2595. DEVMODEA *pDevMode
  2596. );
  2597. int DeviceCapabilitiesW(
  2598. LPCWSTR pDevice,
  2599. LPCWSTR pPort,
  2600. WORD fwCapability,
  2601. LPWSTR pOutput,
  2602. DEVMODEW *pDevMode
  2603. );
  2604. version(UNICODE) {
  2605. alias DeviceCapabilitiesW DeviceCapabilities;
  2606. }
  2607. else {
  2608. alias DeviceCapabilitiesA DeviceCapabilities;
  2609. }
  2610. int DrawEscape( HDC hdc,
  2611. int iEscape,
  2612. int cjIn,
  2613. LPCSTR lpIn);
  2614. BOOL Ellipse(HDC hdc,int left,int top, int right,int bottom);
  2615. int EnumFontFamiliesExA(HDC hdc,LPLOGFONTA lpLogfont,FONTENUMPROCA lpProc,LPARAM lParam,DWORD dwFlags);
  2616. int EnumFontFamiliesExW(HDC hdc,LPLOGFONTW lpLogfont,FONTENUMPROCW lpProc,LPARAM lParam,DWORD dwFlags);
  2617. version(UNICODE) {
  2618. alias EnumFontFamiliesExW EnumFontFamiliesEx;
  2619. }
  2620. else {
  2621. alias EnumFontFamiliesExA EnumFontFamiliesEx;
  2622. }
  2623. int EnumFontFamiliesA(HDC hdc,LPCSTR lpLogfont,FONTENUMPROCA lpProc,LPARAM lParam);
  2624. int EnumFontFamiliesW(HDC hdc,LPCWSTR lpLogfont,FONTENUMPROCW lpProc,LPARAM lParam);
  2625. version(UNICODE) {
  2626. alias EnumFontFamiliesW EnumFontFamiliesW;
  2627. }
  2628. else {
  2629. alias EnumFontFamiliesA EnumFontFamiliesA;
  2630. }
  2631. int EnumFontsA(HDC hdc,LPCSTR lpLogfont, FONTENUMPROCA lpProc,LPARAM lParam);
  2632. int EnumFontsW(HDC hdc,LPCWSTR lpLogfont, FONTENUMPROCW lpProc,LPARAM lParam);
  2633. version(UNICODE) {
  2634. alias EnumFontsW EnumFonts;
  2635. }
  2636. else {
  2637. alias EnumFontsA EnumFonts;
  2638. }
  2639. int EnumObjects(HDC hdc,int nType,GOBJENUMPROC lpFunc,LPVOID lParam);
  2640. BOOL EqualRgn(HRGN hrgn1,HRGN hrgn2);
  2641. int Escape( HDC hdc,
  2642. int iEscape,
  2643. int cjIn,
  2644. LPCSTR pvIn,
  2645. LPVOID pvOut);
  2646. int ExtEscape( HDC hdc,
  2647. int iEscape,
  2648. int cjInput,
  2649. LPCSTR lpInData,
  2650. int cjOutput,
  2651. LPSTR lpOutData);
  2652. int ExcludeClipRect(HDC hdc,int left,int top,int right,int bottom);
  2653. HRGN ExtCreateRegion(XFORM * lpx,DWORD nCount, RGNDATA * lpData);
  2654. BOOL ExtFloodFill(HDC hdc,int x,int y,COLORREF color,UINT type);
  2655. BOOL FillRgn(HDC hdc,HRGN hrgn,HBRUSH hbr);
  2656. BOOL FloodFill(HDC hdc,int x,int y,COLORREF color);
  2657. BOOL FrameRgn(HDC hdc,HRGN hrgn,HBRUSH hbr,int w,int h);
  2658. int GetROP2(HDC hdc);
  2659. BOOL GetAspectRatioFilterEx(HDC hdc,LPSIZE lpsize);
  2660. COLORREF GetBkColor(HDC hdc);
  2661. COLORREF GetDCBrushColor(HDC hdc);
  2662. COLORREF GetDCPenColor(HDC hdc);
  2663. int GetBkMode(HDC hdc);
  2664. LONG GetBitmapBits(
  2665. HBITMAP hbit,
  2666. LONG cb,
  2667. LPVOID lpvBits
  2668. );
  2669. BOOL GetBitmapDimensionEx(HBITMAP hbit,LPSIZE lpsize);
  2670. UINT GetBoundsRect(HDC hdc,LPRECT lprect,UINT flags);
  2671. BOOL GetBrushOrgEx(HDC hdc,LPPOINT lppt);
  2672. BOOL GetCharWidthA(HDC hdc,UINT iFirst,UINT iLast, LPINT lpBuffer);
  2673. BOOL GetCharWidthW(HDC hdc,UINT iFirst,UINT iLast, LPINT lpBuffer);
  2674. version(UNICODE) {
  2675. alias GetCharWidthW GetCharWidth;
  2676. }
  2677. else {
  2678. alias GetCharWidthA GetCharWidth;
  2679. }
  2680. BOOL GetCharWidth32A(HDC hdc,UINT iFirst,UINT iLast, LPINT lpBuffer);
  2681. BOOL GetCharWidth32W(HDC hdc,UINT iFirst,UINT iLast, LPINT lpBuffer);
  2682. version(UNICODE) {
  2683. alias GetCharWidth32W GetCharWidth32;
  2684. }
  2685. else {
  2686. alias GetCharWidth32A GetCharWidth32;
  2687. }
  2688. BOOL GetCharWidthFloatA(HDC hdc,UINT iFirst,UINT iLast, PFLOAT lpBuffer);
  2689. BOOL GetCharWidthFloatW(HDC hdc,UINT iFirst,UINT iLast, PFLOAT lpBuffer);
  2690. version(UNICODE) {
  2691. alias GetCharWidthFloatW GetCharWidthFloat;
  2692. }
  2693. else {
  2694. alias GetCharWidthFloatA GetCharWidthFloat;
  2695. }
  2696. BOOL GetCharABCWidthsA(HDC hdc,
  2697. UINT wFirst,
  2698. UINT wLast,
  2699. LPABC lpABC);
  2700. BOOL GetCharABCWidthsW(HDC hdc,
  2701. UINT wFirst,
  2702. UINT wLast,
  2703. LPABC lpABC);
  2704. version(UNICODE) {
  2705. alias GetCharABCWidthsW GetCharABCWidths;
  2706. }
  2707. else {
  2708. alias GetCharABCWidthsA GetCharABCWidths;
  2709. }
  2710. BOOL GetCharABCWidthsFloatA(HDC hdc,UINT iFirst,UINT iLast, LPABCFLOAT lpABC);
  2711. BOOL GetCharABCWidthsFloatW(HDC hdc,UINT iFirst,UINT iLast, LPABCFLOAT lpABC);
  2712. version(UNICODE) {
  2713. alias GetCharABCWidthsFloatW GetCharABCWidthsFloat;
  2714. }
  2715. else {
  2716. alias GetCharABCWidthsFloatA GetCharABCWidthsFloat;
  2717. }
  2718. int GetClipBox(HDC hdc, LPRECT lprect);
  2719. int GetClipRgn(HDC hdc,HRGN hrgn);
  2720. int GetMetaRgn(HDC hdc,HRGN hrgn);
  2721. HGDIOBJ GetCurrentObject(HDC hdc,UINT type);
  2722. BOOL GetCurrentPositionEx(HDC hdc, LPPOINT lppt);
  2723. int GetDeviceCaps(HDC hdc,int index);
  2724. int GetDIBits(HDC hdc,HBITMAP hbm,UINT start,UINT cLines, LPVOID lpvBits, LPBITMAPINFO lpbmi,UINT usage); // SAL actual size of lpbmi is computed from structure elements
  2725. DWORD GetFontData ( HDC hdc,
  2726. DWORD dwTable,
  2727. DWORD dwOffset,
  2728. PVOID pvBuffer,
  2729. DWORD cjBuffer
  2730. );
  2731. DWORD GetGlyphOutlineA( HDC hdc,
  2732. UINT uChar,
  2733. UINT fuFormat,
  2734. LPGLYPHMETRICS lpgm,
  2735. DWORD cjBuffer,
  2736. LPVOID pvBuffer,
  2737. MAT2 *lpmat2
  2738. );
  2739. DWORD GetGlyphOutlineW( HDC hdc,
  2740. UINT uChar,
  2741. UINT fuFormat,
  2742. LPGLYPHMETRICS lpgm,
  2743. DWORD cjBuffer,
  2744. LPVOID pvBuffer,
  2745. MAT2 *lpmat2
  2746. );
  2747. version(UNICODE) {
  2748. alias GetGlyphOutlineW GetGlyphOutline;
  2749. }
  2750. else {
  2751. alias GetGlyphOutlineA GetGlyphOutline;
  2752. }
  2753. int GetGraphicsMode(HDC hdc);
  2754. int GetMapMode(HDC hdc);
  2755. UINT GetMetaFileBitsEx(HMETAFILE hMF,UINT cbBuffer, LPVOID lpData);
  2756. HMETAFILE GetMetaFileA(LPCSTR lpName);
  2757. HMETAFILE GetMetaFileW(LPCWSTR lpName);
  2758. version(UNICODE) {
  2759. alias GetMetaFileW GetMetaFile;
  2760. }
  2761. else {
  2762. alias GetMetaFileA GetMetaFile;
  2763. }
  2764. COLORREF GetNearestColor(HDC hdc,COLORREF color);
  2765. UINT GetNearestPaletteIndex(HPALETTE h,COLORREF color);
  2766. DWORD GetObjectType(HGDIOBJ h);
  2767. UINT GetOutlineTextMetricsA(HDC hdc,
  2768. UINT cjCopy,
  2769. LPOUTLINETEXTMETRICA potm);
  2770. UINT GetOutlineTextMetricsW(HDC hdc,
  2771. UINT cjCopy,
  2772. LPOUTLINETEXTMETRICW potm);
  2773. version(UNICODE) {
  2774. alias GetOutlineTextMetricsW GetOutlineTextMetrics;
  2775. }
  2776. else {
  2777. alias GetOutlineTextMetricsA GetOutlineTextMetrics;
  2778. }
  2779. UINT GetPaletteEntries( HPALETTE hpal,
  2780. UINT iStart,
  2781. UINT cEntries,
  2782. LPPALETTEENTRY pPalEntries);
  2783. COLORREF GetPixel(HDC hdc,int x,int y);
  2784. int GetPixelFormat(HDC hdc);
  2785. int GetPolyFillMode(HDC hdc);
  2786. BOOL GetRasterizerCaps(LPRASTERIZER_STATUS lpraststat,
  2787. UINT cjBytes);
  2788. int GetRandomRgn (HDC hdc,HRGN hrgn,INT i);
  2789. DWORD GetRegionData( HRGN hrgn,
  2790. DWORD nCount,
  2791. LPRGNDATA lpRgnData);
  2792. int GetRgnBox(HRGN hrgn, LPRECT lprc);
  2793. HGDIOBJ GetStockObject(int i);
  2794. int GetStretchBltMode(HDC hdc);
  2795. UINT GetSystemPaletteEntries(
  2796. HDC hdc,
  2797. UINT iStart,
  2798. UINT cEntries,
  2799. LPPALETTEENTRY pPalEntries
  2800. );
  2801. UINT GetSystemPaletteUse(HDC hdc);
  2802. int GetTextCharacterExtra(HDC hdc);
  2803. UINT GetTextAlign(HDC hdc);
  2804. COLORREF GetTextColor(HDC hdc);
  2805. BOOL GetTextExtentPointA(
  2806. HDC hdc,
  2807. LPCSTR lpString,
  2808. int c,
  2809. LPSIZE lpsz );
  2810. BOOL GetTextExtentPointW(
  2811. HDC hdc,
  2812. LPCWSTR lpString,
  2813. int c,
  2814. LPSIZE lpsz
  2815. );
  2816. version(UNICODE) {
  2817. alias GetTextExtentPointW GetTextExtentPoint;
  2818. }
  2819. else {
  2820. alias GetTextExtentPointA GetTextExtentPoint;
  2821. }
  2822. BOOL GetTextExtentPoint32A(
  2823. HDC hdc,
  2824. LPCSTR lpString,
  2825. int c,
  2826. LPSIZE psizl
  2827. );
  2828. BOOL GetTextExtentPoint32W(
  2829. HDC hdc,
  2830. LPCWSTR lpString,
  2831. int c,
  2832. LPSIZE psizl
  2833. );
  2834. version(UNICODE) {
  2835. alias GetTextExtentPoint32W GetTextExtentPoint32;
  2836. }
  2837. else {
  2838. alias GetTextExtentPoint32A GetTextExtentPoint32;
  2839. }
  2840. BOOL GetTextExtentExPointA(
  2841. HDC hdc,
  2842. LPCSTR lpszString,
  2843. int cchString,
  2844. int nMaxExtent,
  2845. LPINT lpnFit,
  2846. LPINT lpnDx,
  2847. LPSIZE lpSize
  2848. );
  2849. BOOL GetTextExtentExPointW(
  2850. HDC hdc,
  2851. LPCWSTR lpszString,
  2852. int cchString,
  2853. int nMaxExtent,
  2854. LPINT lpnFit,
  2855. LPINT lpnDx,
  2856. LPSIZE lpSize
  2857. );
  2858. version(UNICODE) {
  2859. alias GetTextExtentExPointW GetTextExtentExPoint;
  2860. }
  2861. else {
  2862. alias GetTextExtentExPointA GetTextExtentExPoint;
  2863. }
  2864. int GetTextCharset(HDC hdc);
  2865. int GetTextCharsetInfo(HDC hdc, LPFONTSIGNATURE lpSig,DWORD dwFlags);
  2866. BOOL TranslateCharsetInfo(DWORD *lpSrc, LPCHARSETINFO lpCs,DWORD dwFlags);
  2867. DWORD GetFontLanguageInfo(HDC hdc);
  2868. DWORD GetCharacterPlacementA( HDC hdc, LPCSTR lpString,int nCount,int nMexExtent,LPGCP_RESULTSA lpResults,DWORD dwFlags);
  2869. DWORD GetCharacterPlacementW( HDC hdc, LPCWSTR lpString,int nCount,int nMexExtent,LPGCP_RESULTSW lpResults,DWORD dwFlags);
  2870. version(UNICODE) {
  2871. alias GetCharacterPlacementW GetCharacterPlacement;
  2872. }
  2873. else {
  2874. alias GetCharacterPlacementA GetCharacterPlacement;
  2875. }
  2876. struct WCRANGE {
  2877. WCHAR wcLow;
  2878. USHORT cGlyphs;
  2879. }
  2880. typedef WCRANGE* PWCRANGE;
  2881. typedef WCRANGE* LPWCRANGE;
  2882. struct GLYPHSET {
  2883. DWORD cbThis;
  2884. DWORD flAccel;
  2885. DWORD cGlyphsSupported;
  2886. DWORD cRanges;
  2887. WCRANGE ranges[1];
  2888. }
  2889. typedef GLYPHSET* PGLYPHSET;
  2890. typedef GLYPHSET* LPGLYPHSET;
  2891. /* flAccel flags for the GLYPHSET structure above */
  2892. const auto GS_8BIT_INDICES = 0x00000001;
  2893. /* flags for GetGlyphIndices */
  2894. const auto GGI_MARK_NONEXISTING_GLYPHS = 0x0001;
  2895. DWORD GetFontUnicodeRanges(HDC hdc, LPGLYPHSET lpgs);
  2896. DWORD GetGlyphIndicesA(HDC hdc, LPCSTR lpstr,int c, LPWORD pgi,DWORD fl);
  2897. DWORD GetGlyphIndicesW(HDC hdc, LPCWSTR lpstr,int c, LPWORD pgi,DWORD fl);
  2898. version(UNICODE) {
  2899. alias GetGlyphIndicesW GetGlyphIndices;
  2900. }
  2901. else {
  2902. alias GetGlyphIndicesA GetGlyphIndices;
  2903. }
  2904. BOOL GetTextExtentPointI(HDC hdc, LPWORD pgiIn,int cgi,LPSIZE psize);
  2905. BOOL GetTextExtentExPointI ( HDC hdc,
  2906. LPWORD lpwszString,
  2907. int cwchString,
  2908. int nMaxExtent,
  2909. LPINT lpnFit,
  2910. LPINT lpnDx,
  2911. LPSIZE lpSize
  2912. );
  2913. BOOL GetCharWidthI( HDC hdc,
  2914. UINT giFirst,
  2915. UINT cgi,
  2916. LPWORD pgi,
  2917. LPINT piWidths
  2918. );
  2919. BOOL GetCharABCWidthsI( HDC hdc,
  2920. UINT giFirst,
  2921. UINT cgi,
  2922. LPWORD pgi,
  2923. LPABC pabc
  2924. );
  2925. const auto STAMP_DESIGNVECTOR = (0x8000000 + cast(uint)'d' + (cast(uint)'v' << 8));
  2926. const auto STAMP_AXESLIST = (0x8000000 + cast(uint)'a' + (cast(uint)'l' << 8));
  2927. const auto MM_MAX_NUMAXES = 16;
  2928. struct DESIGNVECTOR {
  2929. DWORD dvReserved;
  2930. DWORD dvNumAxes;
  2931. LONG dvValues[MM_MAX_NUMAXES];
  2932. }
  2933. typedef DESIGNVECTOR* PDESIGNVECTOR;
  2934. typedef DESIGNVECTOR* LPDESIGNVECTOR;
  2935. int AddFontResourceExA(LPCSTR name,DWORD fl,PVOID res);
  2936. int AddFontResourceExW(LPCWSTR name,DWORD fl,PVOID res);
  2937. version(UNICODE) {
  2938. alias AddFontResourceExW AddFontResourceEx;
  2939. }
  2940. else {
  2941. alias AddFontResourceExA AddFontResourceEx;
  2942. }
  2943. BOOL RemoveFontResourceExA(LPCSTR name,DWORD fl,PVOID pdv);
  2944. BOOL RemoveFontResourceExW(LPCWSTR name,DWORD fl,PVOID pdv);
  2945. version(UNICODE) {
  2946. alias RemoveFontResourceExW RemoveFontResourceEx;
  2947. }
  2948. else {
  2949. alias RemoveFontResourceExA RemoveFontResourceEx;
  2950. }
  2951. HANDLE AddFontMemResourceEx( PVOID pFileView,
  2952. DWORD cjSize,
  2953. PVOID pvResrved,
  2954. DWORD* pNumFonts);
  2955. BOOL RemoveFontMemResourceEx(HANDLE h);
  2956. const auto FR_PRIVATE = 0x10;
  2957. const auto FR_NOT_ENUM = 0x20;
  2958. // The actual size of the DESIGNVECTOR and ENUMLOGFONTEXDV structures
  2959. // is determined by dvNumAxes,
  2960. // MM_MAX_NUMAXES only detemines the maximal size allowed
  2961. const auto MM_MAX_AXES_NAMELEN = 16;
  2962. struct AXISINFOA {
  2963. LONG axMinValue;
  2964. LONG axMaxValue;
  2965. BYTE[MM_MAX_AXES_NAMELEN] axAxisName;
  2966. }
  2967. typedef AXISINFOA* PAXISINFOA;
  2968. typedef AXISINFOA* LPAXISINFOA;
  2969. struct AXISINFOW {
  2970. LONG axMinValue;
  2971. LONG axMaxValue;
  2972. WCHAR[MM_MAX_AXES_NAMELEN] axAxisName;
  2973. }
  2974. typedef AXISINFOW* PAXISINFOW;
  2975. typedef AXISINFOW* LPAXISINFOW;
  2976. version(UNICODE) {
  2977. typedef AXISINFOW AXISINFO;
  2978. typedef PAXISINFOW PAXISINFO;
  2979. typedef LPAXISINFOW LPAXISINFO;
  2980. }
  2981. else {
  2982. typedef AXISINFOA AXISINFO;
  2983. typedef PAXISINFOA PAXISINFO;
  2984. typedef LPAXISINFOA LPAXISINFO;
  2985. }
  2986. struct AXESLISTA {
  2987. DWORD axlReserved;
  2988. DWORD axlNumAxes;
  2989. AXISINFOA[MM_MAX_NUMAXES] axlAxisInfo;
  2990. }
  2991. typedef AXESLISTA* PAXESLISTA;
  2992. typedef AXESLISTA* LPAXESLISTA;
  2993. struct AXESLISTW {
  2994. DWORD axlReserved;
  2995. DWORD axlNumAxes;
  2996. AXISINFOW[MM_MAX_NUMAXES] axlAxisInfo;
  2997. }
  2998. typedef AXESLISTW* PAXESLISTW;
  2999. typedef AXESLISTW* LPAXESLISTW;
  3000. version(UNICODE) {
  3001. typedef AXESLISTW AXESLIST;
  3002. typedef PAXESLISTW PAXESLIST;
  3003. typedef LPAXESLISTW LPAXESLIST;
  3004. }
  3005. else {
  3006. typedef AXESLISTA AXESLIST;
  3007. typedef PAXESLISTA PAXESLIST;
  3008. typedef LPAXESLISTA LPAXESLIST;
  3009. }
  3010. // The actual size of the AXESLIST and ENUMTEXTMETRIC structure is
  3011. // determined by axlNumAxes,
  3012. // MM_MAX_NUMAXES only detemines the maximal size allowed
  3013. struct ENUMLOGFONTEXDVA {
  3014. ENUMLOGFONTEXA elfEnumLogfontEx;
  3015. DESIGNVECTOR elfDesignVector;
  3016. }
  3017. typedef ENUMLOGFONTEXDVA* PENUMLOGFONTEXDVA;
  3018. typedef ENUMLOGFONTEXDVA* LPENUMLOGFONTEXDVA;
  3019. struct ENUMLOGFONTEXDVW {
  3020. ENUMLOGFONTEXW elfEnumLogfontEx;
  3021. DESIGNVECTOR elfDesignVector;
  3022. }
  3023. typedef ENUMLOGFONTEXDVW* PENUMLOGFONTEXDVW;
  3024. typedef ENUMLOGFONTEXDVW* LPENUMLOGFONTEXDVW;
  3025. version(UNICODE) {
  3026. typedef ENUMLOGFONTEXDVW ENUMLOGFONTEXDV;
  3027. typedef PENUMLOGFONTEXDVW PENUMLOGFONTEXDV;
  3028. typedef LPENUMLOGFONTEXDVW LPENUMLOGFONTEXDV;
  3029. }
  3030. else {
  3031. typedef ENUMLOGFONTEXDVA ENUMLOGFONTEXDV;
  3032. typedef PENUMLOGFONTEXDVA PENUMLOGFONTEXDV;
  3033. typedef LPENUMLOGFONTEXDVA LPENUMLOGFONTEXDV;
  3034. }
  3035. HFONT CreateFontIndirectExA(ENUMLOGFONTEXDVA *);
  3036. HFONT CreateFontIndirectExW(ENUMLOGFONTEXDVW *);
  3037. version(UNICODE) {
  3038. alias CreateFontIndirectExW CreateFontIndirectEx;
  3039. }
  3040. else {
  3041. alias CreateFontIndirectExA CreateFontIndirectEx;
  3042. }
  3043. struct ENUMTEXTMETRICA {
  3044. NEWTEXTMETRICEXA etmNewTextMetricEx;
  3045. AXESLISTA etmAxesList;
  3046. }
  3047. typedef ENUMTEXTMETRICA* PENUMTEXTMETRICA;
  3048. typedef ENUMTEXTMETRICA* LPENUMTEXTMETRICA;
  3049. struct ENUMTEXTMETRICW {
  3050. NEWTEXTMETRICEXW etmNewTextMetricEx;
  3051. AXESLISTW etmAxesList;
  3052. }
  3053. typedef ENUMTEXTMETRICW* PENUMTEXTMETRICW;
  3054. typedef ENUMTEXTMETRICW* LPENUMTEXTMETRICW;
  3055. version(UNICODE) {
  3056. typedef ENUMTEXTMETRICW ENUMTEXTMETRIC;
  3057. typedef PENUMTEXTMETRICW PENUMTEXTMETRIC;
  3058. typedef LPENUMTEXTMETRICW LPENUMTEXTMETRIC;
  3059. }
  3060. else {
  3061. typedef ENUMTEXTMETRICA ENUMTEXTMETRIC;
  3062. typedef PENUMTEXTMETRICA PENUMTEXTMETRIC;
  3063. typedef LPENUMTEXTMETRICA LPENUMTEXTMETRIC;
  3064. }
  3065. BOOL GetViewportExtEx(HDC hdc,LPSIZE lpsize);
  3066. BOOL GetViewportOrgEx(HDC hdc,LPPOINT lppoint);
  3067. BOOL GetWindowExtEx(HDC hdc,LPSIZE lpsize);
  3068. BOOL GetWindowOrgEx(HDC hdc,LPPOINT lppoint);
  3069. int IntersectClipRect(HDC hdc,int left,int top,int right,int bottom);
  3070. BOOL InvertRgn(HDC hdc,HRGN hrgn);
  3071. BOOL LineDDA(int xStart,int yStart,int xEnd,int yEnd,LINEDDAPROC lpProc,LPARAM data);
  3072. BOOL LineTo(HDC hdc,int x,int y);
  3073. BOOL MaskBlt(HDC hdcDest,int xDest,int yDest,int width,int height,
  3074. HDC hdcSrc,int xSrc,int ySrc,HBITMAP hbmMask,int xMask,int yMask,DWORD rop);
  3075. BOOL PlgBlt(HDC hdcDest, POINT * lpPoint,HDC hdcSrc,int xSrc,int ySrc,int width,
  3076. int height,HBITMAP hbmMask,int xMask,int yMask);
  3077. int OffsetClipRgn(HDC hdc,int x,int y);
  3078. int OffsetRgn(HRGN hrgn,int x,int y);
  3079. BOOL PatBlt(HDC hdc,int x,int y,int w,int h,DWORD rop);
  3080. BOOL Pie(HDC hdc,int left,int top,int right,int bottom,int xr1,int yr1,int xr2,int yr2);
  3081. BOOL PlayMetaFile(HDC hdc,HMETAFILE hmf);
  3082. BOOL PaintRgn(HDC hdc,HRGN hrgn);
  3083. BOOL PolyPolygon(HDC hdc, POINT *apt, INT *asz, int csz);
  3084. BOOL PtInRegion(HRGN hrgn,int x,int y);
  3085. BOOL PtVisible(HDC hdc,int x,int y);
  3086. BOOL RectInRegion(HRGN hrgn,RECT * lprect);
  3087. BOOL RectVisible(HDC hdc,RECT * lprect);
  3088. BOOL Rectangle(HDC hdc,int left,int top,int right,int bottom);
  3089. BOOL RestoreDC(HDC hdc,int nSavedDC);
  3090. HDC ResetDCA(HDC hdc,DEVMODEA * lpdm);
  3091. HDC ResetDCW(HDC hdc,DEVMODEW * lpdm);
  3092. version(UNICODE) {
  3093. alias ResetDCW ResetDC;
  3094. }
  3095. else {
  3096. alias ResetDCA ResetDC;
  3097. }
  3098. UINT RealizePalette(HDC hdc);
  3099. BOOL RemoveFontResourceA(LPCSTR lpFileName);
  3100. BOOL RemoveFontResourceW(LPCWSTR lpFileName);
  3101. version(UNICODE) {
  3102. alias RemoveFontResourceW RemoveFontResource;
  3103. }
  3104. else {
  3105. alias RemoveFontResourceA RemoveFontResource;
  3106. }
  3107. BOOL RoundRect(HDC hdc,int left,int top,int right,int bottom,int width,int height);
  3108. BOOL ResizePalette(HPALETTE hpal,UINT n);
  3109. int SaveDC(HDC hdc);
  3110. int SelectClipRgn(HDC hdc,HRGN hrgn);
  3111. int ExtSelectClipRgn(HDC hdc,HRGN hrgn,int mode);
  3112. int SetMetaRgn(HDC hdc);
  3113. HGDIOBJ SelectObject(HDC hdc,HGDIOBJ h);
  3114. HPALETTE SelectPalette(HDC hdc,HPALETTE hPal,BOOL bForceBkgd);
  3115. COLORREF SetBkColor(HDC hdc,COLORREF color);
  3116. COLORREF SetDCBrushColor(HDC hdc,COLORREF color);
  3117. COLORREF SetDCPenColor(HDC hdc,COLORREF color);
  3118. int SetBkMode(HDC hdc,int mode);
  3119. LONG SetBitmapBits(
  3120. HBITMAP hbm,
  3121. DWORD cb,
  3122. VOID *pvBits);
  3123. UINT SetBoundsRect(HDC hdc,RECT * lprect,UINT flags);
  3124. int SetDIBits(HDC hdc,HBITMAP hbm,UINT start,UINT cLines,VOID *lpBits,BITMAPINFO * lpbmi,UINT ColorUse);
  3125. int SetDIBitsToDevice(HDC hdc,int xDest,int yDest,DWORD w,DWORD h,int xSrc,
  3126. int ySrc,UINT StartScan,UINT cLines,VOID * lpvBits,BITMAPINFO * lpbmi,UINT ColorUse);
  3127. DWORD SetMapperFlags(HDC hdc,DWORD flags);
  3128. int SetGraphicsMode(HDC hdc,int iMode);
  3129. int SetMapMode(HDC hdc,int iMode);
  3130. DWORD SetLayout(HDC hdc,DWORD l);
  3131. DWORD GetLayout(HDC hdc);
  3132. HMETAFILE SetMetaFileBitsEx(UINT cbBuffer, BYTE *lpData);
  3133. UINT SetPaletteEntries( HPALETTE hpal,
  3134. UINT iStart,
  3135. UINT cEntries,
  3136. PALETTEENTRY *pPalEntries);
  3137. COLORREF SetPixel(HDC hdc,int x,int y,COLORREF color);
  3138. BOOL SetPixelV(HDC hdc,int x,int y,COLORREF color);
  3139. BOOL SetPixelFormat(HDC hdc,int format,PIXELFORMATDESCRIPTOR * ppfd);
  3140. int SetPolyFillMode(HDC hdc,int mode);
  3141. BOOL StretchBlt(HDC hdcDest,int xDest,int yDest,int wDest,int hDest,HDC hdcSrc,int xSrc,int ySrc,int wSrc,int hSrc,DWORD rop);
  3142. BOOL SetRectRgn(HRGN hrgn,int left,int top,int right,int bottom);
  3143. int StretchDIBits(HDC hdc,int xDest,int yDest,int DestWidth,int DestHeight,int xSrc,int ySrc,int SrcWidth,int SrcHeight,
  3144. VOID * lpBits,BITMAPINFO * lpbmi,UINT iUsage,DWORD rop);
  3145. int SetROP2(HDC hdc,int rop2);
  3146. int SetStretchBltMode(HDC hdc,int mode);
  3147. UINT SetSystemPaletteUse(HDC hdc,UINT use);
  3148. int SetTextCharacterExtra(HDC hdc,int extra);
  3149. COLORREF SetTextColor(HDC hdc,COLORREF color);
  3150. UINT SetTextAlign(HDC hdc,UINT _align);
  3151. BOOL SetTextJustification(HDC hdc,int extra,int count);
  3152. BOOL UpdateColors(HDC hdc);
  3153. typedef PVOID function(DWORD dwSize, LPVOID pGdiRef) GDIMARSHALLOC;
  3154. typedef HRESULT function(HGDIOBJ hGdiObj,LPVOID pGdiRef,LPVOID *ppDDrawRef) DDRAWMARSHCALLBACKMARSHAL;
  3155. typedef HRESULT function(LPVOID pData,HDC *phdc,LPVOID *ppDDrawRef) DDRAWMARSHCALLBACKUNMARSHAL;
  3156. typedef HRESULT function(LPVOID pDDrawRef) DDRAWMARSHCALLBACKRELEASE;
  3157. const auto GDIREGISTERDDRAWPACKETVERSION = 0x1;
  3158. struct GDIREGISTERDDRAWPACKET {
  3159. DWORD dwSize;
  3160. DWORD dwVersion;
  3161. DDRAWMARSHCALLBACKMARSHAL pfnDdMarshal;
  3162. DDRAWMARSHCALLBACKUNMARSHAL pfnDdUnmarshal;
  3163. DDRAWMARSHCALLBACKRELEASE pfnDdRelease;
  3164. }
  3165. typedef GDIREGISTERDDRAWPACKET* PGDIREGISTERDDRAWPACKET;
  3166. BOOL GdiRegisterDdraw(PGDIREGISTERDDRAWPACKET pPacket,GDIMARSHALLOC *ppfnGdiAlloc);
  3167. ULONG GdiMarshalSize();
  3168. VOID GdiMarshal(DWORD dwProcessIdTo,HGDIOBJ hGdiObj,PVOID pData, ULONG ulFlags);
  3169. HGDIOBJ GdiUnmarshal(PVOID pData, ULONG ulFlags);
  3170. //
  3171. // image blt
  3172. //
  3173. typedef USHORT COLOR16;
  3174. struct TRIVERTEX {
  3175. LONG x;
  3176. LONG y;
  3177. COLOR16 Red;
  3178. COLOR16 Green;
  3179. COLOR16 Blue;
  3180. COLOR16 Alpha;
  3181. }
  3182. typedef TRIVERTEX* PTRIVERTEX;
  3183. typedef TRIVERTEX* LPTRIVERTEX;
  3184. struct GRADIENT_TRIANGLE {
  3185. ULONG Vertex1;
  3186. ULONG Vertex2;
  3187. ULONG Vertex3;
  3188. }
  3189. typedef GRADIENT_TRIANGLE* PGRADIENT_TRIANGLE;
  3190. typedef GRADIENT_TRIANGLE* LPGRADIENT_TRIANGLE;
  3191. struct GRADIENT_RECT {
  3192. ULONG UpperLeft;
  3193. ULONG LowerRight;
  3194. }
  3195. typedef GRADIENT_RECT* PGRADIENT_RECT;
  3196. typedef GRADIENT_RECT* LPGRADIENT_RECT;
  3197. struct BLENDFUNCTION {
  3198. BYTE BlendOp;
  3199. BYTE BlendFlags;
  3200. BYTE SourceConstantAlpha;
  3201. BYTE AlphaFormat;
  3202. }
  3203. typedef BLENDFUNCTION* PBLENDFUNCTION;
  3204. typedef BLENDFUNCTION* LPBLENDFUNCTION;
  3205. //
  3206. // currentlly defined blend function
  3207. //
  3208. const auto AC_SRC_OVER = 0x00;
  3209. //
  3210. // alpha format flags
  3211. //
  3212. const auto AC_SRC_ALPHA = 0x01;
  3213. BOOL AlphaBlend(HDC hdcDest,int xoriginDest,int yoriginDest,int wDest,int hDest,HDC hdcSrc,int xoriginSrc,int yoriginSrc,int wSrc,int hSrc,BLENDFUNCTION ftn);
  3214. BOOL TransparentBlt(HDC hdcDest,int xoriginDest,int yoriginDest,int wDest,int hDest,HDC hdcSrc,
  3215. int xoriginSrc,int yoriginSrc,int wSrc,int hSrc,UINT crTransparent);
  3216. //
  3217. // gradient drawing modes
  3218. //
  3219. const auto GRADIENT_FILL_RECT_H = 0x00000000;
  3220. const auto GRADIENT_FILL_RECT_V = 0x00000001;
  3221. const auto GRADIENT_FILL_TRIANGLE = 0x00000002;
  3222. const auto GRADIENT_FILL_OP_FLAG = 0x000000ff;
  3223. BOOL GradientFill(
  3224. HDC hdc,
  3225. PTRIVERTEX pVertex,
  3226. ULONG nVertex,
  3227. PVOID pMesh,
  3228. ULONG nMesh,
  3229. ULONG ulMode
  3230. );
  3231. BOOL GdiAlphaBlend(HDC hdcDest,int xoriginDest,int yoriginDest,int wDest,int hDest,HDC hdcSrc,int xoriginSrc,int yoriginSrc,int wSrc,int hSrc,BLENDFUNCTION ftn);
  3232. BOOL GdiTransparentBlt(HDC hdcDest,int xoriginDest,int yoriginDest,int wDest,int hDest,HDC hdcSrc,
  3233. int xoriginSrc,int yoriginSrc,int wSrc,int hSrc,UINT crTransparent);
  3234. BOOL GdiGradientFill(HDC hdc,
  3235. PTRIVERTEX pVertex,
  3236. ULONG nVertex,
  3237. PVOID pMesh,
  3238. ULONG nCount,
  3239. ULONG ulMode);
  3240. BOOL PlayMetaFileRecord( HDC hdc,
  3241. LPHANDLETABLE lpHandleTable,
  3242. LPMETARECORD lpMR,
  3243. UINT noObjs);
  3244. typedef int function(HDC hdc, HANDLETABLE* lpht,METARECORD* lpMR,int nObj,LPARAM param) MFENUMPROC;
  3245. BOOL EnumMetaFile(HDC hdc,HMETAFILE hmf,MFENUMPROC proc,LPARAM param);
  3246. typedef int function (HDC hdc, HANDLETABLE* lpht,ENHMETARECORD * lpmr,int hHandles,LPARAM data) ENHMFENUMPROC;
  3247. // Enhanced Metafile Function Declarations
  3248. HENHMETAFILE CloseEnhMetaFile(HDC hdc);
  3249. HENHMETAFILE CopyEnhMetaFileA(HENHMETAFILE hEnh,LPCSTR lpFileName);
  3250. HENHMETAFILE CopyEnhMetaFileW(HENHMETAFILE hEnh,LPCWSTR lpFileName);
  3251. version(UNICODE) {
  3252. alias CopyEnhMetaFileW CopyEnhMetaFile;
  3253. }
  3254. else {
  3255. alias CopyEnhMetaFileA CopyEnhMetaFile;
  3256. }
  3257. HDC CreateEnhMetaFileA(HDC hdc,LPCSTR lpFilename,RECT *lprc,LPCSTR lpDesc);
  3258. HDC CreateEnhMetaFileW(HDC hdc,LPCWSTR lpFilename,RECT *lprc,LPCWSTR lpDesc);
  3259. version(UNICODE) {
  3260. alias CreateEnhMetaFileW CreateEnhMetaFile;
  3261. }
  3262. else {
  3263. alias CreateEnhMetaFileA CreateEnhMetaFile;
  3264. }
  3265. BOOL DeleteEnhMetaFile(HENHMETAFILE hmf);
  3266. BOOL EnumEnhMetaFile(HDC hdc,HENHMETAFILE hmf,ENHMFENUMPROC proc,
  3267. LPVOID param,RECT * lpRect);
  3268. HENHMETAFILE GetEnhMetaFileA(LPCSTR lpName);
  3269. HENHMETAFILE GetEnhMetaFileW(LPCWSTR lpName);
  3270. version(UNICODE) {
  3271. alias GetEnhMetaFileW GetEnhMetaFile;
  3272. }
  3273. else {
  3274. alias GetEnhMetaFileA GetEnhMetaFile;
  3275. }
  3276. UINT GetEnhMetaFileBits( HENHMETAFILE hEMF,
  3277. UINT nSize,LPBYTE lpData);
  3278. UINT GetEnhMetaFileDescriptionA( HENHMETAFILE hemf,
  3279. UINT cchBuffer,
  3280. LPSTR lpDescription);
  3281. UINT GetEnhMetaFileDescriptionW( HENHMETAFILE hemf,
  3282. UINT cchBuffer,
  3283. LPWSTR lpDescription);
  3284. version(UNICODE) {
  3285. alias GetEnhMetaFileDescriptionW GetEnhMetaFileDescription;
  3286. }
  3287. else {
  3288. alias GetEnhMetaFileDescriptionA GetEnhMetaFileDescription;
  3289. }
  3290. UINT GetEnhMetaFileHeader( HENHMETAFILE hemf,
  3291. UINT nSize,
  3292. LPENHMETAHEADER lpEnhMetaHeader);
  3293. UINT GetEnhMetaFilePaletteEntries(HENHMETAFILE hemf,
  3294. UINT nNumEntries,
  3295. LPPALETTEENTRY lpPaletteEntries);
  3296. UINT GetEnhMetaFilePixelFormat( HENHMETAFILE hemf,
  3297. UINT cbBuffer,
  3298. PIXELFORMATDESCRIPTOR *ppfd);
  3299. UINT GetWinMetaFileBits( HENHMETAFILE hemf,
  3300. UINT cbData16,LPBYTE pData16,
  3301. INT iMapMode,
  3302. HDC hdcRef);
  3303. BOOL PlayEnhMetaFile(HDC hdc,HENHMETAFILE hmf,RECT * lprect);
  3304. BOOL PlayEnhMetaFileRecord( HDC hdc,
  3305. LPHANDLETABLE pht,
  3306. ENHMETARECORD *pmr,
  3307. UINT cht);
  3308. HENHMETAFILE SetEnhMetaFileBits( UINT nSize,
  3309. BYTE * pb);
  3310. HENHMETAFILE SetWinMetaFileBits( UINT nSize,
  3311. BYTE *lpMeta16Data,
  3312. HDC hdcRef,
  3313. METAFILEPICT *lpMFP);
  3314. BOOL GdiComment(HDC hdc,UINT nSize, BYTE *lpData);
  3315. BOOL GetTextMetricsA(HDC hdc,LPTEXTMETRICA lptm);
  3316. BOOL GetTextMetricsW(HDC hdc,LPTEXTMETRICW lptm);
  3317. version(UNICODE) {
  3318. alias GetTextMetricsW GetTextMetrics;
  3319. }
  3320. else {
  3321. alias GetTextMetricsA GetTextMetrics;
  3322. }
  3323. /* new GDI */
  3324. struct DIBSECTION {
  3325. BITMAP dsBm;
  3326. BITMAPINFOHEADER dsBmih;
  3327. DWORD dsBitfields[3];
  3328. HANDLE dshSection;
  3329. DWORD dsOffset;
  3330. }
  3331. typedef DIBSECTION* PDIBSECTION;
  3332. typedef DIBSECTION* LPDIBSECTION;
  3333. BOOL AngleArc(HDC hdc,int x,int y,DWORD r,FLOAT StartAngle,FLOAT SweepAngle);
  3334. BOOL PolyPolyline(HDC hdc,POINT *apt, DWORD *asz,DWORD csz);
  3335. BOOL GetWorldTransform(HDC hdc,LPXFORM lpxf);
  3336. BOOL SetWorldTransform(HDC hdc,XFORM * lpxf);
  3337. BOOL ModifyWorldTransform(HDC hdc,XFORM * lpxf,DWORD mode);
  3338. BOOL CombineTransform(LPXFORM lpxfOut,XFORM *lpxf1,XFORM *lpxf2);
  3339. HBITMAP CreateDIBSection(HDC hdc,BITMAPINFO *lpbmi,UINT usage,VOID **ppvBits,HANDLE hSection,DWORD offset);
  3340. UINT GetDIBColorTable(HDC hdc,
  3341. UINT iStart,
  3342. UINT cEntries,
  3343. RGBQUAD *prgbq);
  3344. UINT SetDIBColorTable(HDC hdc,
  3345. UINT iStart,
  3346. UINT cEntries,
  3347. RGBQUAD *prgbq);
  3348. /* Flags value for COLORADJUSTMENT */
  3349. const auto CA_NEGATIVE = 0x0001;
  3350. const auto CA_LOG_FILTER = 0x0002;
  3351. /* IlluminantIndex values */
  3352. const auto ILLUMINANT_DEVICE_DEFAULT = 0;
  3353. const auto ILLUMINANT_A = 1;
  3354. const auto ILLUMINANT_B = 2;
  3355. const auto ILLUMINANT_C = 3;
  3356. const auto ILLUMINANT_D50 = 4;
  3357. const auto ILLUMINANT_D55 = 5;
  3358. const auto ILLUMINANT_D65 = 6;
  3359. const auto ILLUMINANT_D75 = 7;
  3360. const auto ILLUMINANT_F2 = 8;
  3361. const auto ILLUMINANT_MAX_INDEX = ILLUMINANT_F2;
  3362. const auto ILLUMINANT_TUNGSTEN = ILLUMINANT_A;
  3363. const auto ILLUMINANT_DAYLIGHT = ILLUMINANT_C;
  3364. const auto ILLUMINANT_FLUORESCENT = ILLUMINANT_F2;
  3365. const auto ILLUMINANT_NTSC = ILLUMINANT_C;
  3366. /* Min and max for RedGamma, GreenGamma, BlueGamma */
  3367. const auto RGB_GAMMA_MIN = 02500;
  3368. const auto RGB_GAMMA_MAX = 65000;
  3369. /* Min and max for ReferenceBlack and ReferenceWhite */
  3370. const auto REFERENCE_WHITE_MIN = 6000;
  3371. const auto REFERENCE_WHITE_MAX = 10000;
  3372. const auto REFERENCE_BLACK_MIN = 0;
  3373. const auto REFERENCE_BLACK_MAX = 4000;
  3374. /* Min and max for Contrast, Brightness, Colorfulness, RedGreenTint */
  3375. const auto COLOR_ADJ_MIN = -100;
  3376. const auto COLOR_ADJ_MAX = 100;
  3377. struct COLORADJUSTMENT {
  3378. WORD caSize;
  3379. WORD caFlags;
  3380. WORD caIlluminantIndex;
  3381. WORD caRedGamma;
  3382. WORD caGreenGamma;
  3383. WORD caBlueGamma;
  3384. WORD caReferenceBlack;
  3385. WORD caReferenceWhite;
  3386. SHORT caContrast;
  3387. SHORT caBrightness;
  3388. SHORT caColorfulness;
  3389. SHORT caRedGreenTint;
  3390. }
  3391. typedef COLORADJUSTMENT* PCOLORADJUSTMENT;
  3392. typedef COLORADJUSTMENT* LPCOLORADJUSTMENT;
  3393. BOOL SetColorAdjustment(HDC hdc,COLORADJUSTMENT *lpca);
  3394. BOOL GetColorAdjustment(HDC hdc,LPCOLORADJUSTMENT lpca);
  3395. HPALETTE CreateHalftonePalette(HDC hdc);
  3396. typedef BOOL function(HDC, int) ABORTPROC;
  3397. struct DOCINFOA {
  3398. int cbSize;
  3399. LPCSTR lpszDocName;
  3400. LPCSTR lpszOutput;
  3401. LPCSTR lpszDatatype;
  3402. DWORD fwType;
  3403. }
  3404. typedef DOCINFOA* LPDOCINFOA;
  3405. struct DOCINFOW {
  3406. int cbSize;
  3407. LPCWSTR lpszDocName;
  3408. LPCWSTR lpszOutput;
  3409. LPCWSTR lpszDatatype;
  3410. DWORD fwType;
  3411. }
  3412. typedef DOCINFOW* LPDOCINFOW;
  3413. version(UNICODE) {
  3414. typedef DOCINFOW DOCINFO;
  3415. typedef LPDOCINFOW LPDOCINFO;
  3416. }
  3417. else {
  3418. typedef DOCINFOA DOCINFO;
  3419. typedef LPDOCINFOA LPDOCINFO;
  3420. }
  3421. const auto DI_APPBANDING = 0x00000001;
  3422. const auto DI_ROPS_READ_DESTINATION = 0x00000002;
  3423. int StartDocA(HDC hdc,DOCINFOA *lpdi);
  3424. int StartDocW(HDC hdc,DOCINFOW *lpdi);
  3425. version(UNICODE) {
  3426. alias StartDocW StartDoc;
  3427. }
  3428. else {
  3429. alias StartDocA StartDoc;
  3430. }
  3431. int EndDoc(HDC hdc);
  3432. int StartPage(HDC hdc);
  3433. int EndPage(HDC hdc);
  3434. int AbortDoc(HDC hdc);
  3435. int SetAbortProc(HDC hdc,ABORTPROC proc);
  3436. BOOL AbortPath(HDC hdc);
  3437. BOOL ArcTo(HDC hdc,int left,int top,int right,int bottom,int xr1,int yr1,int xr2,int yr2);
  3438. BOOL BeginPath(HDC hdc);
  3439. BOOL CloseFigure(HDC hdc);
  3440. BOOL EndPath(HDC hdc);
  3441. BOOL FillPath(HDC hdc);
  3442. BOOL FlattenPath(HDC hdc);
  3443. int GetPath(HDC hdc, LPPOINT apt, LPBYTE aj, int cpt);
  3444. HRGN PathToRegion(HDC hdc);
  3445. BOOL PolyDraw(HDC hdc, POINT * apt, BYTE * aj,int cpt);
  3446. BOOL SelectClipPath(HDC hdc,int mode);
  3447. int SetArcDirection(HDC hdc,int dir);
  3448. BOOL SetMiterLimit(HDC hdc,FLOAT limit, PFLOAT old);
  3449. BOOL StrokeAndFillPath(HDC hdc);
  3450. BOOL StrokePath(HDC hdc);
  3451. BOOL WidenPath(HDC hdc);
  3452. HPEN ExtCreatePen(DWORD iPenStyle,
  3453. DWORD cWidth,
  3454. LOGBRUSH *plbrush,
  3455. DWORD cStyle,
  3456. DWORD *pstyle);
  3457. BOOL GetMiterLimit(HDC hdc,PFLOAT plimit);
  3458. int GetArcDirection(HDC hdc);
  3459. int GetObjectA(HANDLE h,int c, LPVOID pv);
  3460. int GetObjectW(HANDLE h,int c, LPVOID pv);
  3461. version(UNICODE) {
  3462. alias GetObjectW GetObject;
  3463. }
  3464. else {
  3465. alias GetObjectA GetObject;
  3466. }
  3467. BOOL MoveToEx(HDC hdc,int x,int y, LPPOINT lppt);
  3468. BOOL TextOutA(HDC hdc,int x,int y, LPCSTR lpString,int c);
  3469. BOOL TextOutW(HDC hdc,int x,int y, LPCWSTR lpString,int c);
  3470. version(UNICODE) {
  3471. alias TextOutW TextOut;
  3472. }
  3473. else {
  3474. alias TextOutA TextOut;
  3475. }
  3476. BOOL ExtTextOutA(HDC hdc,int x,int y,UINT options,RECT * lprect, LPCSTR lpString,UINT c, INT * lpDx);
  3477. BOOL ExtTextOutW(HDC hdc,int x,int y,UINT options,RECT * lprect, LPCWSTR lpString,UINT c, INT * lpDx);
  3478. version(UNICODE) {
  3479. alias ExtTextOutW ExtTextOut;
  3480. }
  3481. else {
  3482. alias ExtTextOutA ExtTextOut;
  3483. }
  3484. BOOL PolyTextOutA(HDC hdc, POLYTEXTA * ppt,int nstrings);
  3485. BOOL PolyTextOutW(HDC hdc, POLYTEXTW * ppt,int nstrings);
  3486. version(UNICODE) {
  3487. alias PolyTextOutW PolyTextOut;
  3488. }
  3489. else {
  3490. alias PolyTextOutA PolyTextOut;
  3491. }
  3492. HRGN CreatePolygonRgn( POINT *pptl,
  3493. int cPoint,
  3494. int iMode);
  3495. BOOL DPtoLP(HDC hdc, LPPOINT lppt,int c);
  3496. BOOL LPtoDP(HDC hdc, LPPOINT lppt,int c);
  3497. BOOL Polygon(HDC hdc, POINT *apt,int cpt);
  3498. BOOL Polyline(HDC hdc, POINT *apt,int cpt);
  3499. BOOL PolyBezier(HDC hdc, POINT * apt,DWORD cpt);
  3500. BOOL PolyBezierTo(HDC hdc, POINT * apt,DWORD cpt);
  3501. BOOL PolylineTo(HDC hdc, POINT * apt,DWORD cpt);
  3502. BOOL SetViewportExtEx(HDC hdc,int x,int y, LPSIZE lpsz);
  3503. BOOL SetViewportOrgEx(HDC hdc,int x,int y, LPPOINT lppt);
  3504. BOOL SetWindowExtEx(HDC hdc,int x,int y, LPSIZE lpsz);
  3505. BOOL SetWindowOrgEx(HDC hdc,int x,int y, LPPOINT lppt);
  3506. BOOL OffsetViewportOrgEx(HDC hdc,int x,int y, LPPOINT lppt);
  3507. BOOL OffsetWindowOrgEx(HDC hdc,int x,int y, LPPOINT lppt);
  3508. BOOL ScaleViewportExtEx(HDC hdc,int xn,int dx,int yn,int yd, LPSIZE lpsz);
  3509. BOOL ScaleWindowExtEx(HDC hdc,int xn,int xd,int yn,int yd, LPSIZE lpsz);
  3510. BOOL SetBitmapDimensionEx(HBITMAP hbm,int w,int h, LPSIZE lpsz);
  3511. BOOL SetBrushOrgEx(HDC hdc,int x,int y, LPPOINT lppt);
  3512. int GetTextFaceA(HDC hdc,int c, LPSTR lpName);
  3513. int GetTextFaceW(HDC hdc,int c, LPWSTR lpName);
  3514. version(UNICODE) {
  3515. alias GetTextFaceW GetTextFace;
  3516. }
  3517. else {
  3518. alias GetTextFaceA GetTextFace;
  3519. }
  3520. const auto FONTMAPPER_MAX = 10;
  3521. struct KERNINGPAIR {
  3522. WORD wFirst;
  3523. WORD wSecond;
  3524. int iKernAmount;
  3525. }
  3526. typedef KERNINGPAIR* LPKERNINGPAIR;
  3527. DWORD GetKerningPairsA( HDC hdc,
  3528. DWORD nPairs,
  3529. LPKERNINGPAIR lpKernPair);
  3530. DWORD GetKerningPairsW( HDC hdc,
  3531. DWORD nPairs,
  3532. LPKERNINGPAIR lpKernPair);
  3533. version(UNICODE) {
  3534. alias GetKerningPairsW GetKerningPairs;
  3535. }
  3536. else {
  3537. alias GetKerningPairsA GetKerningPairs;
  3538. }
  3539. BOOL GetDCOrgEx(HDC hdc,LPPOINT lppt);
  3540. BOOL FixBrushOrgEx(HDC hdc,int x,int y, LPPOINT ptl);
  3541. BOOL UnrealizeObject(HGDIOBJ h);
  3542. BOOL GdiFlush();
  3543. DWORD GdiSetBatchLimit(DWORD dw);
  3544. DWORD GdiGetBatchLimit();
  3545. const auto ICM_OFF = 1;
  3546. const auto ICM_ON = 2;
  3547. const auto ICM_QUERY = 3;
  3548. const auto ICM_DONE_OUTSIDEDC = 4;
  3549. typedef int function(LPSTR, LPARAM) ICMENUMPROCA;
  3550. typedef int function(LPWSTR, LPARAM) ICMENUMPROCW;
  3551. version(UNICODE) {
  3552. alias ICMENUMPROCW ICMENUMPROC;
  3553. }
  3554. else {
  3555. alias ICMENUMPROCA ICMENUMPROC;
  3556. }
  3557. int SetICMMode(HDC hdc,int mode);
  3558. BOOL CheckColorsInGamut( HDC hdc,
  3559. LPRGBTRIPLE lpRGBTriple,
  3560. LPVOID dlpBuffer,
  3561. DWORD nCount);
  3562. HCOLORSPACE GetColorSpace(HDC hdc);
  3563. BOOL GetLogColorSpaceA(HCOLORSPACE hColorSpace,
  3564. LPLOGCOLORSPACEA lpBuffer,
  3565. DWORD nSize);
  3566. BOOL GetLogColorSpaceW(HCOLORSPACE hColorSpace,
  3567. LPLOGCOLORSPACEW lpBuffer,
  3568. DWORD nSize);
  3569. version(UNICODE) {
  3570. alias GetLogColorSpaceW GetLogColorSpace;
  3571. }
  3572. else {
  3573. alias GetLogColorSpaceA GetLogColorSpace;
  3574. }
  3575. HCOLORSPACE CreateColorSpaceA(LPLOGCOLORSPACEA lplcs);
  3576. HCOLORSPACE CreateColorSpaceW(LPLOGCOLORSPACEW lplcs);
  3577. version(UNICODE) {
  3578. alias CreateColorSpaceW CreateColorSpace;
  3579. }
  3580. else {
  3581. alias CreateColorSpaceA CreateColorSpace;
  3582. }
  3583. HCOLORSPACE SetColorSpace(HDC hdc,HCOLORSPACE hcs);
  3584. BOOL DeleteColorSpace(HCOLORSPACE hcs);
  3585. BOOL GetICMProfileA( HDC hdc,
  3586. LPDWORD pBufSize,
  3587. LPSTR pszFilename);
  3588. BOOL GetICMProfileW( HDC hdc,
  3589. LPDWORD pBufSize,
  3590. LPWSTR pszFilename);
  3591. version(UNICODE) {
  3592. alias GetICMProfileW GetICMProfile;
  3593. }
  3594. else {
  3595. alias GetICMProfileA GetICMProfile;
  3596. }
  3597. BOOL SetICMProfileA(HDC hdc,LPSTR lpFileName);
  3598. BOOL SetICMProfileW(HDC hdc,LPWSTR lpFileName);
  3599. version(UNICODE) {
  3600. alias SetICMProfileW SetICMProfile;
  3601. }
  3602. else {
  3603. alias SetICMProfileA SetICMProfile;
  3604. }
  3605. BOOL GetDeviceGammaRamp(HDC hdc, LPVOID lpRamp);
  3606. BOOL SetDeviceGammaRamp(HDC hdc, LPVOID lpRamp);
  3607. BOOL ColorMatchToTarget(HDC hdc,HDC hdcTarget,DWORD action);
  3608. int EnumICMProfilesA(HDC hdc,ICMENUMPROCA proc,LPARAM param);
  3609. int EnumICMProfilesW(HDC hdc,ICMENUMPROCW proc,LPARAM param);
  3610. version(UNICODE) {
  3611. alias EnumICMProfilesW EnumICMProfilesW;
  3612. }
  3613. else {
  3614. alias EnumICMProfilesA EnumICMProfilesA;
  3615. }
  3616. // The Win95 update API UpdateICMRegKeyA is deprecated to set last error to ERROR_NOT_SUPPORTED and return FALSE
  3617. BOOL UpdateICMRegKeyA(DWORD reserved,LPSTR lpszCMID,LPSTR lpszFileName,UINT command);
  3618. // The Win95 update API UpdateICMRegKeyW is deprecated to set last error to ERROR_NOT_SUPPORTED and return FALSE
  3619. BOOL UpdateICMRegKeyW(DWORD reserved,LPWSTR lpszCMID,LPWSTR lpszFileName,UINT command);
  3620. version(UNICODE) {
  3621. alias UpdateICMRegKeyW UpdateICMRegKey;
  3622. }
  3623. else {
  3624. alias UpdateICMRegKeyA UpdateICMRegKey;
  3625. }
  3626. BOOL ColorCorrectPalette(HDC hdc,HPALETTE hPal,DWORD deFirst,DWORD num);
  3627. // Enhanced metafile constants.
  3628. const auto ENHMETA_SIGNATURE = 0x20454D46;
  3629. // Stock object flag used in the object handle index in the enhanced
  3630. // metafile records.
  3631. // E.g. The object handle index (META_STOCK_OBJECT | BLACK_BRUSH)
  3632. // represents the stock object BLACK_BRUSH.
  3633. const auto ENHMETA_STOCK_OBJECT = 0x80000000;
  3634. // Enhanced metafile record types.
  3635. const auto EMR_HEADER = 1;
  3636. const auto EMR_POLYBEZIER = 2;
  3637. const auto EMR_POLYGON = 3;
  3638. const auto EMR_POLYLINE = 4;
  3639. const auto EMR_POLYBEZIERTO = 5;
  3640. const auto EMR_POLYLINETO = 6;
  3641. const auto EMR_POLYPOLYLINE = 7;
  3642. const auto EMR_POLYPOLYGON = 8;
  3643. const auto EMR_SETWINDOWEXTEX = 9;
  3644. const auto EMR_SETWINDOWORGEX = 10;
  3645. const auto EMR_SETVIEWPORTEXTEX = 11;
  3646. const auto EMR_SETVIEWPORTORGEX = 12;
  3647. const auto EMR_SETBRUSHORGEX = 13;
  3648. const auto EMR_EOF = 14;
  3649. const auto EMR_SETPIXELV = 15;
  3650. const auto EMR_SETMAPPERFLAGS = 16;
  3651. const auto EMR_SETMAPMODE = 17;
  3652. const auto EMR_SETBKMODE = 18;
  3653. const auto EMR_SETPOLYFILLMODE = 19;
  3654. const auto EMR_SETROP2 = 20;
  3655. const auto EMR_SETSTRETCHBLTMODE = 21;
  3656. const auto EMR_SETTEXTALIGN = 22;
  3657. const auto EMR_SETCOLORADJUSTMENT = 23;
  3658. const auto EMR_SETTEXTCOLOR = 24;
  3659. const auto EMR_SETBKCOLOR = 25;
  3660. const auto EMR_OFFSETCLIPRGN = 26;
  3661. const auto EMR_MOVETOEX = 27;
  3662. const auto EMR_SETMETARGN = 28;
  3663. const auto EMR_EXCLUDECLIPRECT = 29;
  3664. const auto EMR_INTERSECTCLIPRECT = 30;
  3665. const auto EMR_SCALEVIEWPORTEXTEX = 31;
  3666. const auto EMR_SCALEWINDOWEXTEX = 32;
  3667. const auto EMR_SAVEDC = 33;
  3668. const auto EMR_RESTOREDC = 34;
  3669. const auto EMR_SETWORLDTRANSFORM = 35;
  3670. const auto EMR_MODIFYWORLDTRANSFORM = 36;
  3671. const auto EMR_SELECTOBJECT = 37;
  3672. const auto EMR_CREATEPEN = 38;
  3673. const auto EMR_CREATEBRUSHINDIRECT = 39;
  3674. const auto EMR_DELETEOBJECT = 40;
  3675. const auto EMR_ANGLEARC = 41;
  3676. const auto EMR_ELLIPSE = 42;
  3677. const auto EMR_RECTANGLE = 43;
  3678. const auto EMR_ROUNDRECT = 44;
  3679. const auto EMR_ARC = 45;
  3680. const auto EMR_CHORD = 46;
  3681. const auto EMR_PIE = 47;
  3682. const auto EMR_SELECTPALETTE = 48;
  3683. const auto EMR_CREATEPALETTE = 49;
  3684. const auto EMR_SETPALETTEENTRIES = 50;
  3685. const auto EMR_RESIZEPALETTE = 51;
  3686. const auto EMR_REALIZEPALETTE = 52;
  3687. const auto EMR_EXTFLOODFILL = 53;
  3688. const auto EMR_LINETO = 54;
  3689. const auto EMR_ARCTO = 55;
  3690. const auto EMR_POLYDRAW = 56;
  3691. const auto EMR_SETARCDIRECTION = 57;
  3692. const auto EMR_SETMITERLIMIT = 58;
  3693. const auto EMR_BEGINPATH = 59;
  3694. const auto EMR_ENDPATH = 60;
  3695. const auto EMR_CLOSEFIGURE = 61;
  3696. const auto EMR_FILLPATH = 62;
  3697. const auto EMR_STROKEANDFILLPATH = 63;
  3698. const auto EMR_STROKEPATH = 64;
  3699. const auto EMR_FLATTENPATH = 65;
  3700. const auto EMR_WIDENPATH = 66;
  3701. const auto EMR_SELECTCLIPPATH = 67;
  3702. const auto EMR_ABORTPATH = 68;
  3703. const auto EMR_GDICOMMENT = 70;
  3704. const auto EMR_FILLRGN = 71;
  3705. const auto EMR_FRAMERGN = 72;
  3706. const auto EMR_INVERTRGN = 73;
  3707. const auto EMR_PAINTRGN = 74;
  3708. const auto EMR_EXTSELECTCLIPRGN = 75;
  3709. const auto EMR_BITBLT = 76;
  3710. const auto EMR_STRETCHBLT = 77;
  3711. const auto EMR_MASKBLT = 78;
  3712. const auto EMR_PLGBLT = 79;
  3713. const auto EMR_SETDIBITSTODEVICE = 80;
  3714. const auto EMR_STRETCHDIBITS = 81;
  3715. const auto EMR_EXTCREATEFONTINDIRECTW = 82;
  3716. const auto EMR_EXTTEXTOUTA = 83;
  3717. const auto EMR_EXTTEXTOUTW = 84;
  3718. const auto EMR_POLYBEZIER16 = 85;
  3719. const auto EMR_POLYGON16 = 86;
  3720. const auto EMR_POLYLINE16 = 87;
  3721. const auto EMR_POLYBEZIERTO16 = 88;
  3722. const auto EMR_POLYLINETO16 = 89;
  3723. const auto EMR_POLYPOLYLINE16 = 90;
  3724. const auto EMR_POLYPOLYGON16 = 91;
  3725. const auto EMR_POLYDRAW16 = 92;
  3726. const auto EMR_CREATEMONOBRUSH = 93;
  3727. const auto EMR_CREATEDIBPATTERNBRUSHPT = 94;
  3728. const auto EMR_EXTCREATEPEN = 95;
  3729. const auto EMR_POLYTEXTOUTA = 96;
  3730. const auto EMR_POLYTEXTOUTW = 97;
  3731. const auto EMR_SETICMMODE = 98;
  3732. const auto EMR_CREATECOLORSPACE = 99;
  3733. const auto EMR_SETCOLORSPACE = 100;
  3734. const auto EMR_DELETECOLORSPACE = 101;
  3735. const auto EMR_GLSRECORD = 102;
  3736. const auto EMR_GLSBOUNDEDRECORD = 103;
  3737. const auto EMR_PIXELFORMAT = 104;
  3738. const auto EMR_RESERVED_105 = 105;
  3739. const auto EMR_RESERVED_106 = 106;
  3740. const auto EMR_RESERVED_107 = 107;
  3741. const auto EMR_RESERVED_108 = 108;
  3742. const auto EMR_RESERVED_109 = 109;
  3743. const auto EMR_RESERVED_110 = 110;
  3744. const auto EMR_COLORCORRECTPALETTE = 111;
  3745. const auto EMR_SETICMPROFILEA = 112;
  3746. const auto EMR_SETICMPROFILEW = 113;
  3747. const auto EMR_ALPHABLEND = 114;
  3748. const auto EMR_SETLAYOUT = 115;
  3749. const auto EMR_TRANSPARENTBLT = 116;
  3750. const auto EMR_RESERVED_117 = 117;
  3751. const auto EMR_GRADIENTFILL = 118;
  3752. const auto EMR_RESERVED_119 = 119;
  3753. const auto EMR_RESERVED_120 = 120;
  3754. const auto EMR_COLORMATCHTOTARGETW = 121;
  3755. const auto EMR_CREATECOLORSPACEW = 122;
  3756. const auto EMR_MIN = 1;
  3757. const auto EMR_MAX = 122;
  3758. // Base record type for the enhanced metafile.
  3759. struct EMR {
  3760. DWORD iType; // Enhanced metafile record type
  3761. DWORD nSize; // Length of the record in bytes.
  3762. // This must be a multiple of 4.
  3763. }
  3764. typedef EMR* PEMR;
  3765. typedef EMR* LPEMR;
  3766. // Base text record type for the enhanced metafile.
  3767. struct EMRTEXT {
  3768. POINTL ptlReference;
  3769. DWORD nChars;
  3770. DWORD offString; // Offset to the string
  3771. DWORD fOptions;
  3772. RECTL rcl;
  3773. DWORD offDx; // Offset to the inter-character spacing array.
  3774. // This is always given.
  3775. }
  3776. typedef EMRTEXT* PEMRTEXT;
  3777. typedef EMRTEXT* LPEMRTEXT;
  3778. // Record structures for the enhanced metafile.
  3779. struct ABORTPATH {
  3780. EMR emr;
  3781. }
  3782. typedef ABORTPATH EMRABORTPATH;
  3783. typedef ABORTPATH* PEMRABORTPATH;
  3784. typedef ABORTPATH* LPEMRABORTPATH;
  3785. typedef ABORTPATH EMRBEGINPATH;
  3786. typedef ABORTPATH* PEMRBEGINPATH;
  3787. typedef ABORTPATH* LPEMRBEGINPATH;
  3788. typedef ABORTPATH EMRENDPATH;
  3789. typedef ABORTPATH* PEMRENDPATH;
  3790. typedef ABORTPATH* LPEMRENDPATH;
  3791. typedef ABORTPATH EMRCLOSEFIGURE;
  3792. typedef ABORTPATH* PEMRCLOSEFIGURE;
  3793. typedef ABORTPATH* LPEMRCLOSEFIGURE;
  3794. typedef ABORTPATH EMRFLATTENPATH;
  3795. typedef ABORTPATH* PEMRFLATTENPATH;
  3796. typedef ABORTPATH* LPEMRFLATTENPATH;
  3797. typedef ABORTPATH EMRWIDENPATH;
  3798. typedef ABORTPATH* PEMRWIDENPATH;
  3799. typedef ABORTPATH* LPEMRWIDENPATH;
  3800. typedef ABORTPATH EMRSETMETARGN;
  3801. typedef ABORTPATH* PEMRSETMETARGN;
  3802. typedef ABORTPATH* LPEMRSETMETARGN;
  3803. typedef ABORTPATH EMRSAVEDC;
  3804. typedef ABORTPATH* PEMRSAVEDC;
  3805. typedef ABORTPATH* LPEMRSAVEDC;
  3806. typedef ABORTPATH EMRREALIZEPALETTE;
  3807. typedef ABORTPATH* PEMRREALIZEPALETTE;
  3808. typedef ABORTPATH* LPEMRREALIZEPALETTE;
  3809. struct EMRSELECTCLIPPATH {
  3810. EMR emr;
  3811. DWORD iMode;
  3812. }
  3813. typedef EMRSELECTCLIPPATH* PEMRSELECTCLIPPATH;
  3814. typedef EMRSELECTCLIPPATH* LPEMRSELECTCLIPPATH;
  3815. typedef EMRSELECTCLIPPATH EMRSETBKMODE;
  3816. typedef EMRSELECTCLIPPATH* PEMRSETBKMODE;
  3817. typedef EMRSELECTCLIPPATH* LPEMRSETBKMODE;
  3818. typedef EMRSELECTCLIPPATH EMRSETLAYOUT;
  3819. typedef EMRSELECTCLIPPATH* PEMRSETLAYOUT;
  3820. typedef EMRSELECTCLIPPATH* LPEMRSETLAYOUT;
  3821. typedef EMRSELECTCLIPPATH EMRSETPOLYFILLMODE;
  3822. typedef EMRSELECTCLIPPATH* PEMRSETPOLYFILLMODE;
  3823. typedef EMRSELECTCLIPPATH* LPEMRSETPOLYFILLMODE;
  3824. typedef EMRSELECTCLIPPATH EMRSETROP2;
  3825. typedef EMRSELECTCLIPPATH* PEMRSETROP2;
  3826. typedef EMRSELECTCLIPPATH* LPEMRSETROP2;
  3827. typedef EMRSELECTCLIPPATH EMRSETSTRETCHBLTMODE;
  3828. typedef EMRSELECTCLIPPATH* PEMRSETSTRETCHBLTMODE;
  3829. typedef EMRSELECTCLIPPATH* LPEMRSETSTRETCHBLTMODE;
  3830. typedef EMRSELECTCLIPPATH EMRSETICMMODE;
  3831. typedef EMRSELECTCLIPPATH* PEMRSETICMMODE;
  3832. typedef EMRSELECTCLIPPATH* LPEMRSETICMMODE;
  3833. typedef EMRSELECTCLIPPATH EMRSETTEXTALIGN;
  3834. typedef EMRSELECTCLIPPATH* PEMRSETTEXTALIGN;
  3835. typedef EMRSELECTCLIPPATH* LPEMRSETTEXTALIGN;
  3836. struct EMRSETMITERLIMIT {
  3837. EMR emr;
  3838. FLOAT eMiterLimit;
  3839. }
  3840. typedef EMRSETMITERLIMIT* PEMRSETMITERLIMIT;
  3841. typedef EMRSETMITERLIMIT* LPEMRSETMITERLIMIT;
  3842. struct EMRRESTOREDC {
  3843. EMR emr;
  3844. LONG iRelative; // Specifies a relative instance
  3845. }
  3846. typedef EMRRESTOREDC* PEMRRESTOREDC;
  3847. typedef EMRRESTOREDC* LPEMRRESTOREDC;
  3848. struct EMRSETARCDIRECTION {
  3849. EMR emr;
  3850. DWORD iArcDirection; // Specifies the arc direction in the
  3851. // advanced graphics mode.
  3852. }
  3853. typedef EMRSETARCDIRECTION* PEMRSETARCDIRECTION;
  3854. typedef EMRSETARCDIRECTION* LPEMRSETARCDIRECTION;
  3855. struct EMRSETMAPPERFLAGS {
  3856. EMR emr;
  3857. DWORD dwFlags;
  3858. }
  3859. typedef EMRSETMAPPERFLAGS* PEMRSETMAPPERFLAGS;
  3860. typedef EMRSETMAPPERFLAGS* LPEMRSETMAPPERFLAGS;
  3861. struct EMRSETTEXTCOLOR {
  3862. EMR emr;
  3863. COLORREF crColor;
  3864. }
  3865. typedef EMRSETTEXTCOLOR EMRSETBKCOLOR;
  3866. typedef EMRSETTEXTCOLOR* PEMRSETBKCOLOR;
  3867. typedef EMRSETTEXTCOLOR* LPEMRSETBKCOLOR;
  3868. typedef EMRSETTEXTCOLOR* PEMRSETTEXTCOLOR;
  3869. typedef EMRSETTEXTCOLOR* LPEMRSETTEXTCOLOR;
  3870. struct EMRSELECTOBJECT {
  3871. EMR emr;
  3872. DWORD ihObject; // Object handle index
  3873. }
  3874. typedef EMRSELECTOBJECT* PEMRSELECTOBJECT;
  3875. typedef EMRSELECTOBJECT* LPEMRSELECTOBJECT;
  3876. typedef EMRSELECTOBJECT EMRDELETEOBJECT;
  3877. typedef EMRSELECTOBJECT* PEMRDELETEOBJECT;
  3878. typedef EMRSELECTOBJECT* LPEMRDELETEOBJECT;
  3879. struct EMRSELECTPALETTE {
  3880. EMR emr;
  3881. DWORD ihPal; // Palette handle index, background mode only
  3882. }
  3883. typedef EMRSELECTPALETTE* PEMRSELECTPALETTE;
  3884. typedef EMRSELECTPALETTE* LPEMRSELECTPALETTE;
  3885. struct EMRRESIZEPALETTE {
  3886. EMR emr;
  3887. DWORD ihPal; // Palette handle index
  3888. DWORD cEntries;
  3889. }
  3890. typedef EMRRESIZEPALETTE* PEMRRESIZEPALETTE;
  3891. typedef EMRRESIZEPALETTE* LPEMRRESIZEPALETTE;
  3892. struct EMRSETPALETTEENTRIES {
  3893. EMR emr;
  3894. DWORD ihPal; // Palette handle index
  3895. DWORD iStart;
  3896. DWORD cEntries;
  3897. PALETTEENTRY[1] aPalEntries;// The peFlags fields do not contain any flags
  3898. }
  3899. typedef EMRSETPALETTEENTRIES* PEMRSETPALETTEENTRIES;
  3900. typedef EMRSETPALETTEENTRIES* LPEMRSETPALETTEENTRIES;
  3901. struct EMRSETCOLORADJUSTMENT {
  3902. EMR emr;
  3903. COLORADJUSTMENT ColorAdjustment;
  3904. }
  3905. typedef EMRSETCOLORADJUSTMENT* PEMRSETCOLORADJUSTMENT;
  3906. typedef EMRSETCOLORADJUSTMENT* LPEMRSETCOLORADJUSTMENT;
  3907. struct EMRGDICOMMENT {
  3908. EMR emr;
  3909. DWORD cbData; // Size of data in bytes
  3910. BYTE[1] Data;
  3911. }
  3912. typedef EMRGDICOMMENT* PEMRGDICOMMENT;
  3913. typedef EMRGDICOMMENT* LPEMRGDICOMMENT;
  3914. struct EMREOF {
  3915. EMR emr;
  3916. DWORD nPalEntries; // Number of palette entries
  3917. DWORD offPalEntries; // Offset to the palette entries
  3918. DWORD nSizeLast; // Same as nSize and must be the last DWORD
  3919. // of the record. The palette entries,
  3920. // if exist, precede this field.
  3921. }
  3922. typedef EMREOF* PEMREOF;
  3923. typedef EMREOF* LPEMREOF;
  3924. struct EMRLINETO {
  3925. EMR emr;
  3926. POINTL ptl;
  3927. }
  3928. typedef EMRLINETO* PEMRLINETO;
  3929. typedef EMRLINETO* LPEMRLINETO;
  3930. typedef EMRLINETO EMRLINETOEX;
  3931. typedef EMRLINETO* PEMRLINETOEX;
  3932. typedef EMRLINETO* LPEMRLINETOEX;
  3933. struct EMROFFSETCLIPRGN {
  3934. EMR emr;
  3935. POINTL ptlOffset;
  3936. }
  3937. typedef EMROFFSETCLIPRGN* PEMROFFSETCLIPRGN;
  3938. struct EMRFILLPATH {
  3939. EMR emr;
  3940. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  3941. }
  3942. typedef EMRFILLPATH* PEMRFILLPATH;
  3943. typedef EMRFILLPATH* LPEMRFILLPATH;
  3944. typedef EMRFILLPATH EMRSTROKEANDFILLPATH;
  3945. typedef EMRFILLPATH* PEMRSTROKEANDFILLPATH;
  3946. typedef EMRFILLPATH* LPEMRSTROKEANDFILLPATH;
  3947. typedef EMRFILLPATH EMRSTROKEPATH;
  3948. typedef EMRFILLPATH* PEMRSTROKEPATH;
  3949. typedef EMRFILLPATH* LPEMRSTROKEPATH;
  3950. struct EMREXCLUDECLIPRECT {
  3951. EMR emr;
  3952. RECTL rclClip;
  3953. }
  3954. typedef EMREXCLUDECLIPRECT* PEMREXCLUDECLIPRECT;
  3955. typedef EMREXCLUDECLIPRECT* LPEMREXCLUDECLIPRECT;
  3956. typedef EMREXCLUDECLIPRECT EMRINTERSECTCLIPRECT;
  3957. typedef EMREXCLUDECLIPRECT* PEMRINTERSECTCLIPRECT;
  3958. typedef EMREXCLUDECLIPRECT* LPEMRINTERSECTCLIPRECT;
  3959. struct EMRSETVIEWPORTORGEX {
  3960. EMR emr;
  3961. POINTL ptlOrigin;
  3962. }
  3963. typedef EMRSETVIEWPORTORGEX* PEMRSETVIEWPORTORGEX;
  3964. typedef EMRSETVIEWPORTORGEX* LPEMRSETVIEWPORTORGEX;
  3965. typedef EMRSETVIEWPORTORGEX EMRSETWINDOWORGEX;
  3966. typedef EMRSETVIEWPORTORGEX* PEMRSETWINDOWORGEX;
  3967. typedef EMRSETVIEWPORTORGEX* LPEMRSETWINDOWORGEX;
  3968. typedef EMRSETVIEWPORTORGEX EMRSETBRUSHORGEX;
  3969. typedef EMRSETVIEWPORTORGEX* PEMRSETBRUSHORGEX;
  3970. typedef EMRSETVIEWPORTORGEX* LPEMRSETBRUSHORGEX;
  3971. struct EMRSETVIEWPORTEXTEX {
  3972. EMR emr;
  3973. SIZEL szlExtent;
  3974. }
  3975. typedef EMRSETVIEWPORTEXTEX* PEMRSETVIEWPORTEXTEX;
  3976. typedef EMRSETVIEWPORTEXTEX* LPEMRSETVIEWPORTEXTEX;
  3977. typedef EMRSETVIEWPORTORGEX EMRSETWINDOWEXTEX;
  3978. typedef EMRSETVIEWPORTORGEX* PEMRSETWINDOWEXTEX;
  3979. typedef EMRSETVIEWPORTORGEX* LPEMRSETWINDOWEXTEX;
  3980. struct EMRSCALEVIEWPORTEXTEX {
  3981. EMR emr;
  3982. LONG xNum;
  3983. LONG xDenom;
  3984. LONG yNum;
  3985. LONG yDenom;
  3986. }
  3987. typedef EMRSCALEVIEWPORTEXTEX* PEMRSCALEVIEWPORTEXTEX;
  3988. typedef EMRSCALEVIEWPORTEXTEX* LPEMRSCALEVIEWPORTEXTEX;
  3989. typedef EMRSCALEVIEWPORTEXTEX EMRSCALEWINDOWEXTEX;
  3990. typedef EMRSCALEVIEWPORTEXTEX* PEMRSCALEWINDOWEXTEX;
  3991. typedef EMRSCALEVIEWPORTEXTEX* LPEMRSCALEWINDOWEXTEX;
  3992. struct EMRSETWORLDTRANSFORM {
  3993. EMR emr;
  3994. XFORM xform;
  3995. }
  3996. typedef EMRSETWORLDTRANSFORM* PEMRSETWORLDTRANSFORM;
  3997. typedef EMRSETWORLDTRANSFORM* LPEMRSETWORLDTRANSFORM;
  3998. struct EMRMODIFYWORLDTRANSFORM {
  3999. EMR emr;
  4000. XFORM xform;
  4001. DWORD iMode;
  4002. }
  4003. typedef EMRMODIFYWORLDTRANSFORM* PEMRMODIFYWORLDTRANSFORM;
  4004. struct EMRSETPIXELV {
  4005. EMR emr;
  4006. POINTL ptlPixel;
  4007. COLORREF crColor;
  4008. }
  4009. typedef EMRSETPIXELV* PEMRSETPIXELV;
  4010. struct EMREXTFLOODFILL {
  4011. EMR emr;
  4012. POINTL ptlStart;
  4013. COLORREF crColor;
  4014. DWORD iMode;
  4015. }
  4016. typedef EMREXTFLOODFILL* PEMREXTFLOODFILL;
  4017. struct EMRELLIPSE {
  4018. EMR emr;
  4019. RECTL rclBox; // Inclusive-inclusive bounding rectangle
  4020. }
  4021. typedef EMRELLIPSE* PEMRELLIPSE;
  4022. typedef EMRELLIPSE* LPEMRELLIPSE;
  4023. typedef EMRELLIPSE EMRRECTANGLE;
  4024. typedef EMRELLIPSE* PEMRRECTANGLE;
  4025. typedef EMRELLIPSE* LPEMRRECTANGLE;
  4026. struct EMRROUNDRECT {
  4027. EMR emr;
  4028. RECTL rclBox; // Inclusive-inclusive bounding rectangle
  4029. SIZEL szlCorner;
  4030. }
  4031. typedef EMRROUNDRECT* PEMRROUNDRECT;
  4032. struct EMRARC {
  4033. EMR emr;
  4034. RECTL rclBox; // Inclusive-inclusive bounding rectangle
  4035. POINTL ptlStart;
  4036. POINTL ptlEnd;
  4037. }
  4038. typedef EMRARC* PEMRARC;
  4039. typedef EMRARC* LPEMRARC;
  4040. typedef EMRARC EMRARCTO;
  4041. typedef EMRARC* PEMRARCTO;
  4042. typedef EMRARC* LPEMRARCTO;
  4043. typedef EMRARC EMRCHORD;
  4044. typedef EMRARC* PEMRCHORD;
  4045. typedef EMRARC* LPEMRCHORD;
  4046. typedef EMRARC EMRPIE;
  4047. typedef EMRARC* PEMRPIE;
  4048. typedef EMRARC* LPEMRPIE;
  4049. struct EMRANGLEARC {
  4050. EMR emr;
  4051. POINTL ptlCenter;
  4052. DWORD nRadius;
  4053. FLOAT eStartAngle;
  4054. FLOAT eSweepAngle;
  4055. }
  4056. typedef EMRANGLEARC* PEMRANGLEARC;
  4057. struct EMRPOLYLINE {
  4058. EMR emr;
  4059. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4060. DWORD cptl;
  4061. POINTL[1] aptl;
  4062. }
  4063. typedef EMRPOLYLINE* PEMRPOLYLINE;
  4064. typedef EMRPOLYLINE* LPEMRPOLYLINE;
  4065. typedef EMRPOLYLINE EMRPOLYBEZIER;
  4066. typedef EMRPOLYLINE* PEMRPOLYBEZIER;
  4067. typedef EMRPOLYLINE* LPEMRPOLYBEZIER;
  4068. typedef EMRPOLYLINE EMRPOLYGON;
  4069. typedef EMRPOLYLINE* PEMRPOLYGON;
  4070. typedef EMRPOLYLINE* LPEMRPOLYGON;
  4071. typedef EMRPOLYLINE EMRPOLYBEZIERTO;
  4072. typedef EMRPOLYLINE* PEMRPOLYBEZIERTO;
  4073. typedef EMRPOLYLINE* LPEMRPOLYBEZIERTO;
  4074. typedef EMRPOLYLINE EMRPOLYLINETO;
  4075. typedef EMRPOLYLINE* PEMRPOLYLINETO;
  4076. typedef EMRPOLYLINE* LPEMRPOLYLINETO;
  4077. struct EMRPOLYLINE16 {
  4078. EMR emr;
  4079. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4080. DWORD cpts;
  4081. POINTS[1] apts;
  4082. }
  4083. typedef EMRPOLYLINE16* PEMRPOLYLINE16;
  4084. typedef EMRPOLYLINE16* LPEMRPOLYLINE16;
  4085. typedef EMRPOLYLINE16 EMRPOLYBEZIER16;
  4086. typedef EMRPOLYLINE16* PEMRPOLYBEZIER16;
  4087. typedef EMRPOLYLINE16* LPEMRPOLYBEZIER16;
  4088. typedef EMRPOLYLINE16 EMRPOLYGON16;
  4089. typedef EMRPOLYLINE16* PEMRPOLYGON16;
  4090. typedef EMRPOLYLINE16* LPEMRPOLYGON16;
  4091. typedef EMRPOLYLINE16 EMRPOLYBEZIERTO16;
  4092. typedef EMRPOLYLINE16* PEMRPOLYBEZIERTO16;
  4093. typedef EMRPOLYLINE16* LPEMRPOLYBEZIERTO16;
  4094. typedef EMRPOLYLINE16 EMRPOLYLINETO16;
  4095. typedef EMRPOLYLINE16* PEMRPOLYLINETO16;
  4096. typedef EMRPOLYLINE16* LPEMRPOLYLINETO16;
  4097. struct EMRPOLYDRAW {
  4098. EMR emr;
  4099. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4100. DWORD cptl; // Number of points
  4101. POINTL[1] aptl; // Array of points
  4102. BYTE[1] abTypes; // Array of point types
  4103. }
  4104. typedef EMRPOLYDRAW* PEMRPOLYDRAW;
  4105. typedef EMRPOLYDRAW* LPEMRPOLYDRAW;
  4106. struct EMRPOLYDRAW16 {
  4107. EMR emr;
  4108. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4109. DWORD cpts; // Number of points
  4110. POINTS[1] apts; // Array of points
  4111. BYTE[1] abTypes; // Array of point types
  4112. }
  4113. typedef EMRPOLYDRAW16* PEMRPOLYDRAW16;
  4114. typedef EMRPOLYDRAW16* LPEMRPOLYDRAW16;
  4115. struct EMRPOLYPOLYLINE {
  4116. EMR emr;
  4117. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4118. DWORD nPolys; // Number of polys
  4119. DWORD cptl; // Total number of points in all polys
  4120. DWORD[1] aPolyCounts; // Array of point counts for each poly
  4121. POINTL[1] aptl; // Array of points
  4122. }
  4123. typedef EMRPOLYPOLYLINE* PEMRPOLYPOLYLINE;
  4124. typedef EMRPOLYPOLYLINE* LPEMRPOLYPOLYLINE;
  4125. typedef EMRPOLYPOLYLINE EMRPOLYPOLYGON;
  4126. typedef EMRPOLYPOLYLINE* PEMRPOLYPOLYGON;
  4127. typedef EMRPOLYPOLYLINE* LPEMRPOLYPOLYGON;
  4128. struct EMRPOLYPOLYLINE16 {
  4129. EMR emr;
  4130. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4131. DWORD nPolys; // Number of polys
  4132. DWORD cpts; // Total number of points in all polys
  4133. DWORD[1] aPolyCounts; // Array of point counts for each poly
  4134. POINTS[1] apts; // Array of points
  4135. }
  4136. typedef EMRPOLYPOLYLINE16* PEMRPOLYPOLYLINE16;
  4137. typedef EMRPOLYPOLYLINE16* LPEMRPOLYPOLYLINE16;
  4138. typedef EMRPOLYPOLYLINE16 EMRPOLYPOLYGON16;
  4139. typedef EMRPOLYPOLYLINE16* PEMRPOLYPOLYGON16;
  4140. typedef EMRPOLYPOLYLINE16* LPEMRPOLYPOLYGON16;
  4141. struct EMRINVERTRGN {
  4142. EMR emr;
  4143. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4144. DWORD cbRgnData; // Size of region data in bytes
  4145. BYTE[1] RgnData;
  4146. }
  4147. typedef EMRINVERTRGN* PEMRINVERTRGN;
  4148. typedef EMRINVERTRGN* LPEMRINVERTRGN;
  4149. typedef EMRINVERTRGN EMRPAINTRGN;
  4150. typedef EMRINVERTRGN* PEMRPAINTRGN;
  4151. typedef EMRINVERTRGN* LPEMRPAINTRGN;
  4152. struct EMRFILLRGN {
  4153. EMR emr;
  4154. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4155. DWORD cbRgnData; // Size of region data in bytes
  4156. DWORD ihBrush; // Brush handle index
  4157. BYTE[1] RgnData;
  4158. }
  4159. typedef EMRFILLRGN* PEMRFILLRGN;
  4160. typedef EMRFILLRGN* LPEMRFILLRGN;
  4161. struct EMRFRAMERGN {
  4162. EMR emr;
  4163. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4164. DWORD cbRgnData; // Size of region data in bytes
  4165. DWORD ihBrush; // Brush handle index
  4166. SIZEL szlStroke;
  4167. BYTE[1] RgnData;
  4168. }
  4169. typedef EMRFRAMERGN* PEMRFRAMERGN;
  4170. typedef EMRFRAMERGN* LPEMRFRAMERGN;
  4171. struct EMREXTSELECTCLIPRGN {
  4172. EMR emr;
  4173. DWORD cbRgnData; // Size of region data in bytes
  4174. DWORD iMode;
  4175. BYTE[1] RgnData;
  4176. }
  4177. typedef EMREXTSELECTCLIPRGN* PEMREXTSELECTCLIPRGN;
  4178. typedef EMREXTSELECTCLIPRGN* LPEMREXTSELECTCLIPRGN;
  4179. struct EMREXTTEXTOUTA {
  4180. EMR emr;
  4181. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4182. DWORD iGraphicsMode; // Current graphics mode
  4183. FLOAT exScale; // X and Y scales from Page units to .01mm units
  4184. FLOAT eyScale; // if graphics mode is GM_COMPATIBLE.
  4185. EMRTEXT emrtext; // This is followed by the string and spacing
  4186. // array
  4187. }
  4188. typedef EMREXTTEXTOUTA* PEMREXTTEXTOUTA;
  4189. typedef EMREXTTEXTOUTA* LPEMREXTTEXTOUTA;
  4190. typedef EMREXTTEXTOUTA EMREXTTEXTOUTW;
  4191. typedef EMREXTTEXTOUTA* PEMREXTTEXTOUTW;
  4192. typedef EMREXTTEXTOUTA* LPEMREXTTEXTOUTW;
  4193. struct EMRPOLYTEXTOUTA {
  4194. EMR emr;
  4195. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4196. DWORD iGraphicsMode; // Current graphics mode
  4197. FLOAT exScale; // X and Y scales from Page units to .01mm units
  4198. FLOAT eyScale; // if graphics mode is GM_COMPATIBLE.
  4199. LONG cStrings;
  4200. EMRTEXT[1] aemrtext; // Array of EMRTEXT structures. This is
  4201. // followed by the strings and spacing arrays.
  4202. }
  4203. typedef EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTA;
  4204. typedef EMRPOLYTEXTOUTA* LPEMRPOLYTEXTOUTA;
  4205. typedef EMRPOLYTEXTOUTA EMRPOLYTEXTOUTW;
  4206. typedef EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTW;
  4207. typedef EMRPOLYTEXTOUTA* LPEMRPOLYTEXTOUTW;
  4208. struct EMRBITBLT {
  4209. EMR emr;
  4210. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4211. LONG xDest;
  4212. LONG yDest;
  4213. LONG cxDest;
  4214. LONG cyDest;
  4215. DWORD dwRop;
  4216. LONG xSrc;
  4217. LONG ySrc;
  4218. XFORM xformSrc; // Source DC transform
  4219. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4220. DWORD iUsageSrc; // Source bitmap info color table usage
  4221. // (DIB_RGB_COLORS)
  4222. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4223. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4224. DWORD offBitsSrc; // Offset to the source bitmap bits
  4225. DWORD cbBitsSrc; // Size of the source bitmap bits
  4226. }
  4227. typedef EMRBITBLT* PEMRBITBLT;
  4228. typedef EMRBITBLT* LPEMRBITBLT;
  4229. struct EMRSTRETCHBLT {
  4230. EMR emr;
  4231. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4232. LONG xDest;
  4233. LONG yDest;
  4234. LONG cxDest;
  4235. LONG cyDest;
  4236. DWORD dwRop;
  4237. LONG xSrc;
  4238. LONG ySrc;
  4239. XFORM xformSrc; // Source DC transform
  4240. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4241. DWORD iUsageSrc; // Source bitmap info color table usage
  4242. // (DIB_RGB_COLORS)
  4243. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4244. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4245. DWORD offBitsSrc; // Offset to the source bitmap bits
  4246. DWORD cbBitsSrc; // Size of the source bitmap bits
  4247. LONG cxSrc;
  4248. LONG cySrc;
  4249. }
  4250. typedef EMRSTRETCHBLT* PEMRSTRETCHBLT;
  4251. typedef EMRSTRETCHBLT* LPEMRSTRETCHBLT;
  4252. struct EMRMASKBLT {
  4253. EMR emr;
  4254. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4255. LONG xDest;
  4256. LONG yDest;
  4257. LONG cxDest;
  4258. LONG cyDest;
  4259. DWORD dwRop;
  4260. LONG xSrc;
  4261. LONG ySrc;
  4262. XFORM xformSrc; // Source DC transform
  4263. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4264. DWORD iUsageSrc; // Source bitmap info color table usage
  4265. // (DIB_RGB_COLORS)
  4266. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4267. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4268. DWORD offBitsSrc; // Offset to the source bitmap bits
  4269. DWORD cbBitsSrc; // Size of the source bitmap bits
  4270. LONG xMask;
  4271. LONG yMask;
  4272. DWORD iUsageMask; // Mask bitmap info color table usage
  4273. DWORD offBmiMask; // Offset to the mask BITMAPINFO structure if any
  4274. DWORD cbBmiMask; // Size of the mask BITMAPINFO structure if any
  4275. DWORD offBitsMask; // Offset to the mask bitmap bits if any
  4276. DWORD cbBitsMask; // Size of the mask bitmap bits if any
  4277. }
  4278. typedef EMRMASKBLT* PEMRMASKBLT;
  4279. typedef EMRMASKBLT* LPEMRMASKBLT;
  4280. struct EMRPLGBLT {
  4281. EMR emr;
  4282. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4283. POINTL[3] aptlDest;
  4284. LONG xSrc;
  4285. LONG ySrc;
  4286. LONG cxSrc;
  4287. LONG cySrc;
  4288. XFORM xformSrc; // Source DC transform
  4289. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4290. DWORD iUsageSrc; // Source bitmap info color table usage
  4291. // (DIB_RGB_COLORS)
  4292. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4293. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4294. DWORD offBitsSrc; // Offset to the source bitmap bits
  4295. DWORD cbBitsSrc; // Size of the source bitmap bits
  4296. LONG xMask;
  4297. LONG yMask;
  4298. DWORD iUsageMask; // Mask bitmap info color table usage
  4299. DWORD offBmiMask; // Offset to the mask BITMAPINFO structure if any
  4300. DWORD cbBmiMask; // Size of the mask BITMAPINFO structure if any
  4301. DWORD offBitsMask; // Offset to the mask bitmap bits if any
  4302. DWORD cbBitsMask; // Size of the mask bitmap bits if any
  4303. }
  4304. typedef EMRPLGBLT* PEMRPLGBLT;
  4305. typedef EMRPLGBLT* LPEMRPLGBLT;
  4306. struct EMRSETDIBITSTODEVICE {
  4307. EMR emr;
  4308. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4309. LONG xDest;
  4310. LONG yDest;
  4311. LONG xSrc;
  4312. LONG ySrc;
  4313. LONG cxSrc;
  4314. LONG cySrc;
  4315. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4316. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4317. DWORD offBitsSrc; // Offset to the source bitmap bits
  4318. DWORD cbBitsSrc; // Size of the source bitmap bits
  4319. DWORD iUsageSrc; // Source bitmap info color table usage
  4320. DWORD iStartScan;
  4321. DWORD cScans;
  4322. }
  4323. typedef EMRSETDIBITSTODEVICE* PEMRSETDIBITSTODEVICE;
  4324. typedef EMRSETDIBITSTODEVICE* LPEMRSETDIBITSTODEVICE;
  4325. struct EMRSTRETCHDIBITS {
  4326. EMR emr;
  4327. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4328. LONG xDest;
  4329. LONG yDest;
  4330. LONG xSrc;
  4331. LONG ySrc;
  4332. LONG cxSrc;
  4333. LONG cySrc;
  4334. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4335. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4336. DWORD offBitsSrc; // Offset to the source bitmap bits
  4337. DWORD cbBitsSrc; // Size of the source bitmap bits
  4338. DWORD iUsageSrc; // Source bitmap info color table usage
  4339. DWORD dwRop;
  4340. LONG cxDest;
  4341. LONG cyDest;
  4342. }
  4343. typedef EMRSTRETCHDIBITS* PEMRSTRETCHDIBITS;
  4344. typedef EMRSTRETCHDIBITS* LPEMRSTRETCHDIBITS;
  4345. struct EMREXTCREATEFONTINDIRECTW {
  4346. EMR emr;
  4347. DWORD ihFont; // Font handle index
  4348. EXTLOGFONTW elfw;
  4349. }
  4350. typedef EMREXTCREATEFONTINDIRECTW* PEMREXTCREATEFONTINDIRECTW;
  4351. typedef EMREXTCREATEFONTINDIRECTW* LPEMREXTCREATEFONTINDIRECTW;
  4352. struct EMRCREATEPALETTE {
  4353. EMR emr;
  4354. DWORD ihPal; // Palette handle index
  4355. LOGPALETTE lgpl; // The peFlags fields in the palette entries
  4356. // do not contain any flags
  4357. }
  4358. typedef EMRCREATEPALETTE* PEMRCREATEPALETTE;
  4359. typedef EMRCREATEPALETTE* LPEMRCREATEPALETTE;
  4360. struct EMRCREATEPEN {
  4361. EMR emr;
  4362. DWORD ihPen; // Pen handle index
  4363. LOGPEN lopn;
  4364. }
  4365. typedef EMRCREATEPEN* PEMRCREATEPEN;
  4366. typedef EMRCREATEPEN* LPEMRCREATEPEN;
  4367. struct EMREXTCREATEPEN {
  4368. EMR emr;
  4369. DWORD ihPen; // Pen handle index
  4370. DWORD offBmi; // Offset to the BITMAPINFO structure if any
  4371. DWORD cbBmi; // Size of the BITMAPINFO structure if any
  4372. // The bitmap info is followed by the bitmap
  4373. // bits to form a packed DIB.
  4374. DWORD offBits; // Offset to the brush bitmap bits if any
  4375. DWORD cbBits; // Size of the brush bitmap bits if any
  4376. EXTLOGPEN elp; // The extended pen with the style array.
  4377. }
  4378. typedef EMREXTCREATEPEN* PEMREXTCREATEPEN;
  4379. typedef EMREXTCREATEPEN* LPEMREXTCREATEPEN;
  4380. struct EMRCREATEBRUSHINDIRECT {
  4381. EMR emr;
  4382. DWORD ihBrush; // Brush handle index
  4383. LOGBRUSH32 lb; // The style must be BS_SOLID, BS_HOLLOW,
  4384. // BS_NULL or BS_HATCHED.
  4385. }
  4386. typedef EMRCREATEBRUSHINDIRECT* PEMRCREATEBRUSHINDIRECT;
  4387. typedef EMRCREATEBRUSHINDIRECT* LPEMRCREATEBRUSHINDIRECT;
  4388. struct EMRCREATEMONOBRUSH {
  4389. EMR emr;
  4390. DWORD ihBrush; // Brush handle index
  4391. DWORD iUsage; // Bitmap info color table usage
  4392. DWORD offBmi; // Offset to the BITMAPINFO structure
  4393. DWORD cbBmi; // Size of the BITMAPINFO structure
  4394. DWORD offBits; // Offset to the bitmap bits
  4395. DWORD cbBits; // Size of the bitmap bits
  4396. }
  4397. typedef EMRCREATEMONOBRUSH* PEMRCREATEMONOBRUSH;
  4398. typedef EMRCREATEMONOBRUSH* LPEMRCREATEMONOBRUSH;
  4399. struct EMRCREATEDIBPATTERNBRUSHPT {
  4400. EMR emr;
  4401. DWORD ihBrush; // Brush handle index
  4402. DWORD iUsage; // Bitmap info color table usage
  4403. DWORD offBmi; // Offset to the BITMAPINFO structure
  4404. DWORD cbBmi; // Size of the BITMAPINFO structure
  4405. // The bitmap info is followed by the bitmap
  4406. // bits to form a packed DIB.
  4407. DWORD offBits; // Offset to the bitmap bits
  4408. DWORD cbBits; // Size of the bitmap bits
  4409. }
  4410. typedef EMRCREATEDIBPATTERNBRUSHPT* PEMRCREATEDIBPATTERNBRUSHPT;
  4411. typedef EMRCREATEDIBPATTERNBRUSHPT* LPEMRCREATEDIBPATTERNBRUSHPT;
  4412. struct EMRFORMAT {
  4413. DWORD dSignature; // Format signature, e.g. ENHMETA_SIGNATURE.
  4414. DWORD nVersion; // Format version number.
  4415. DWORD cbData; // Size of data in bytes.
  4416. DWORD offData; // Offset to data from GDICOMMENT_IDENTIFIER.
  4417. // It must begin at a DWORD offset.
  4418. }
  4419. typedef EMRFORMAT* PEMRFORMAT;
  4420. typedef EMRFORMAT* LPEMRFORMAT;
  4421. struct EMRGLSRECORD {
  4422. EMR emr;
  4423. DWORD cbData; // Size of data in bytes
  4424. BYTE[1] Data;
  4425. }
  4426. typedef EMRGLSRECORD* PEMRGLSRECORD;
  4427. typedef EMRGLSRECORD* LPEMRGLSRECORD;
  4428. struct EMRGLSBOUNDEDRECORD {
  4429. EMR emr;
  4430. RECTL rclBounds; // Bounds in recording coordinates
  4431. DWORD cbData; // Size of data in bytes
  4432. BYTE[1] Data;
  4433. }
  4434. typedef EMRGLSBOUNDEDRECORD* PEMRGLSBOUNDEDRECORD;
  4435. typedef EMRGLSBOUNDEDRECORD* LPEMRGLSBOUNDEDRECORD;
  4436. struct EMRPIXELFORMAT {
  4437. EMR emr;
  4438. PIXELFORMATDESCRIPTOR pfd;
  4439. }
  4440. typedef EMRPIXELFORMAT* PEMRPIXELFORMAT;
  4441. typedef EMRPIXELFORMAT* LPEMRPIXELFORMAT;
  4442. struct EMRCREATECOLORSPACE {
  4443. EMR emr;
  4444. DWORD ihCS; // ColorSpace handle index
  4445. LOGCOLORSPACEA lcs; // Ansi version of LOGCOLORSPACE
  4446. }
  4447. typedef EMRCREATECOLORSPACE* PEMRCREATECOLORSPACE;
  4448. typedef EMRCREATECOLORSPACE* LPEMRCREATECOLORSPACE;
  4449. struct EMRSETCOLORSPACE {
  4450. EMR emr;
  4451. DWORD ihCS; // ColorSpace handle index
  4452. }
  4453. typedef EMRSETCOLORSPACE* PEMRSETCOLORSPACE;
  4454. typedef EMRSETCOLORSPACE* LPEMRSETCOLORSPACE;
  4455. typedef EMRSETCOLORSPACE EMRSELECTCOLORSPACE;
  4456. typedef EMRSETCOLORSPACE* PEMRSELECTCOLORSPACE;
  4457. typedef EMRSETCOLORSPACE* LPEMRSELECTCOLORSPACE;
  4458. typedef EMRSETCOLORSPACE EMRDELETECOLORSPACE;
  4459. typedef EMRSETCOLORSPACE* PEMRDELETECOLORSPACE;
  4460. typedef EMRSETCOLORSPACE* LPEMRDELETECOLORSPACE;
  4461. struct EMREXTESCAPE {
  4462. EMR emr;
  4463. INT iEscape; // Escape code
  4464. INT cbEscData; // Size of escape data
  4465. BYTE[1] EscData; // Escape data
  4466. }
  4467. typedef EMREXTESCAPE* PEMREXTESCAPE;
  4468. typedef EMREXTESCAPE* LPEMREXTESCAPE;
  4469. typedef EMREXTESCAPE EMRDRAWESCAPE;
  4470. typedef EMREXTESCAPE* PEMRDRAWESCAPE;
  4471. typedef EMREXTESCAPE* LPEMRDRAWESCAPE;
  4472. struct EMRNAMEDESCAPE {
  4473. EMR emr;
  4474. INT iEscape; // Escape code
  4475. INT cbDriver; // Size of driver name
  4476. INT cbEscData; // Size of escape data
  4477. BYTE[1] EscData; // Driver name and Escape data
  4478. }
  4479. typedef EMRNAMEDESCAPE* PEMRNAMEDESCAPE;
  4480. typedef EMRNAMEDESCAPE* LPEMRNAMEDESCAPE;
  4481. const auto SETICMPROFILE_EMBEDED = 0x00000001;
  4482. struct EMRSETICMPROFILE {
  4483. EMR emr;
  4484. DWORD dwFlags; // flags
  4485. DWORD cbName; // Size of desired profile name
  4486. DWORD cbData; // Size of raw profile data if attached
  4487. BYTE[1] Data; // Array size is cbName + cbData
  4488. }
  4489. typedef EMRSETICMPROFILE* PEMRSETICMPROFILE;
  4490. typedef EMRSETICMPROFILE* LPEMRSETICMPROFILE;
  4491. typedef EMRSETICMPROFILE EMRSETICMPROFILEA;
  4492. typedef EMRSETICMPROFILE* PEMRSETICMPROFILEA;
  4493. typedef EMRSETICMPROFILE* LPEMRSETICMPROFILEA;
  4494. typedef EMRSETICMPROFILE EMRSETICMPROFILEW;
  4495. typedef EMRSETICMPROFILE* PEMRSETICMPROFILEW;
  4496. typedef EMRSETICMPROFILE* LPEMRSETICMPROFILEW;
  4497. const auto CREATECOLORSPACE_EMBEDED = 0x00000001;
  4498. struct EMRCREATECOLORSPACEW {
  4499. EMR emr;
  4500. DWORD ihCS; // ColorSpace handle index
  4501. LOGCOLORSPACEW lcs; // Unicode version of logical color space structure
  4502. DWORD dwFlags; // flags
  4503. DWORD cbData; // size of raw source profile data if attached
  4504. BYTE[1] Data; // Array size is cbData
  4505. }
  4506. typedef EMRCREATECOLORSPACEW* PEMRCREATECOLORSPACEW;
  4507. typedef EMRCREATECOLORSPACEW* LPEMRCREATECOLORSPACEW;
  4508. const auto COLORMATCHTOTARGET_EMBEDED = 0x00000001;
  4509. struct EMRCOLORMATCHTOTARGET {
  4510. EMR emr;
  4511. DWORD dwAction; // CS_ENABLE, CS_DISABLE or CS_DELETE_TRANSFORM
  4512. DWORD dwFlags; // flags
  4513. DWORD cbName; // Size of desired target profile name
  4514. DWORD cbData; // Size of raw target profile data if attached
  4515. BYTE[1] Data; // Array size is cbName + cbData
  4516. }
  4517. typedef EMRCOLORMATCHTOTARGET* PEMRCOLORMATCHTOTARGET;
  4518. typedef EMRCOLORMATCHTOTARGET* LPEMRCOLORMATCHTOTARGET;
  4519. struct EMRCOLORCORRECTPALETTE {
  4520. EMR emr;
  4521. DWORD ihPalette; // Palette handle index
  4522. DWORD nFirstEntry; // Index of first entry to correct
  4523. DWORD nPalEntries; // Number of palette entries to correct
  4524. DWORD nReserved; // Reserved
  4525. }
  4526. typedef EMRCOLORCORRECTPALETTE* PEMRCOLORCORRECTPALETTE;
  4527. typedef EMRCOLORCORRECTPALETTE* LPEMRCOLORCORRECTPALETTE;
  4528. struct EMRALPHABLEND {
  4529. EMR emr;
  4530. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4531. LONG xDest;
  4532. LONG yDest;
  4533. LONG cxDest;
  4534. LONG cyDest;
  4535. DWORD dwRop;
  4536. LONG xSrc;
  4537. LONG ySrc;
  4538. XFORM xformSrc; // Source DC transform
  4539. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4540. DWORD iUsageSrc; // Source bitmap info color table usage
  4541. // (DIB_RGB_COLORS)
  4542. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4543. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4544. DWORD offBitsSrc; // Offset to the source bitmap bits
  4545. DWORD cbBitsSrc; // Size of the source bitmap bits
  4546. LONG cxSrc;
  4547. LONG cySrc;
  4548. }
  4549. typedef EMRALPHABLEND* PEMRALPHABLEND;
  4550. typedef EMRALPHABLEND* LPEMRALPHABLEND;
  4551. struct EMRGRADIENTFILL {
  4552. EMR emr;
  4553. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4554. DWORD nVer;
  4555. DWORD nTri;
  4556. ULONG ulMode;
  4557. TRIVERTEX[1] Ver;
  4558. }
  4559. typedef EMRGRADIENTFILL* PEMRGRADIENTFILL;
  4560. typedef EMRGRADIENTFILL* LPEMRGRADIENTFILL;
  4561. struct EMRTRANSPARENTBLT {
  4562. EMR emr;
  4563. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  4564. LONG xDest;
  4565. LONG yDest;
  4566. LONG cxDest;
  4567. LONG cyDest;
  4568. DWORD dwRop;
  4569. LONG xSrc;
  4570. LONG ySrc;
  4571. XFORM xformSrc; // Source DC transform
  4572. COLORREF crBkColorSrc; // Source DC BkColor in RGB
  4573. DWORD iUsageSrc; // Source bitmap info color table usage
  4574. // (DIB_RGB_COLORS)
  4575. DWORD offBmiSrc; // Offset to the source BITMAPINFO structure
  4576. DWORD cbBmiSrc; // Size of the source BITMAPINFO structure
  4577. DWORD offBitsSrc; // Offset to the source bitmap bits
  4578. DWORD cbBitsSrc; // Size of the source bitmap bits
  4579. LONG cxSrc;
  4580. LONG cySrc;
  4581. }
  4582. typedef EMRTRANSPARENTBLT* PEMRTRANSPARENTBLT;
  4583. typedef EMRTRANSPARENTBLT* LPEMRTRANSPARENTBLT;
  4584. const auto GDICOMMENT_IDENTIFIER = 0x43494447;
  4585. const auto GDICOMMENT_WINDOWS_METAFILE = 0x80000001;
  4586. const auto GDICOMMENT_BEGINGROUP = 0x00000002;
  4587. const auto GDICOMMENT_ENDGROUP = 0x00000003;
  4588. const auto GDICOMMENT_MULTIFORMATS = 0x40000004;
  4589. const auto EPS_SIGNATURE = 0x46535045;
  4590. const auto GDICOMMENT_UNICODE_STRING = 0x00000040;
  4591. const auto GDICOMMENT_UNICODE_END = 0x00000080;
  4592. // OpenGL wgl prototypes
  4593. BOOL wglCopyContext(HGLRC, HGLRC, UINT);
  4594. HGLRC wglCreateContext(HDC);
  4595. HGLRC wglCreateLayerContext(HDC, int);
  4596. BOOL wglDeleteContext(HGLRC);
  4597. HGLRC wglGetCurrentContext();
  4598. HDC wglGetCurrentDC();
  4599. PROC wglGetProcAddress(LPCSTR);
  4600. BOOL wglMakeCurrent(HDC, HGLRC);
  4601. BOOL wglShareLists(HGLRC, HGLRC);
  4602. BOOL wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
  4603. BOOL wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
  4604. version(UNICODE) {
  4605. alias wglUseFontBitmapsW wglUseFontBitmaps;
  4606. }
  4607. else {
  4608. alias wglUseFontBitmapsA wglUseFontBitmaps;
  4609. }
  4610. BOOL SwapBuffers(HDC);
  4611. struct POINTFLOAT {
  4612. FLOAT x;
  4613. FLOAT y;
  4614. }
  4615. typedef POINTFLOAT* PPOINTFLOAT;
  4616. typedef POINTFLOAT* LPPOINTFLOAT;
  4617. struct GLYPHMETRICSFLOAT {
  4618. FLOAT gmfBlackBoxX;
  4619. FLOAT gmfBlackBoxY;
  4620. POINTFLOAT gmfptGlyphOrigin;
  4621. FLOAT gmfCellIncX;
  4622. FLOAT gmfCellIncY;
  4623. }
  4624. typedef GLYPHMETRICSFLOAT* PGLYPHMETRICSFLOAT;
  4625. typedef GLYPHMETRICSFLOAT* LPGLYPHMETRICSFLOAT;
  4626. const auto WGL_FONT_LINES = 0;
  4627. const auto WGL_FONT_POLYGONS = 1;
  4628. BOOL wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT,
  4629. FLOAT, int, LPGLYPHMETRICSFLOAT);
  4630. BOOL wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT,
  4631. FLOAT, int, LPGLYPHMETRICSFLOAT);
  4632. version(UNICODE) {
  4633. alias wglUseFontOutlinesW wglUseFontOutlines;
  4634. }
  4635. else {
  4636. alias wglUseFontOutlinesA wglUseFontOutlines;
  4637. }
  4638. /* Layer plane descriptor */
  4639. struct LAYERPLANEDESCRIPTOR { // lpd
  4640. WORD nSize;
  4641. WORD nVersion;
  4642. DWORD dwFlags;
  4643. BYTE iPixelType;
  4644. BYTE cColorBits;
  4645. BYTE cRedBits;
  4646. BYTE cRedShift;
  4647. BYTE cGreenBits;
  4648. BYTE cGreenShift;
  4649. BYTE cBlueBits;
  4650. BYTE cBlueShift;
  4651. BYTE cAlphaBits;
  4652. BYTE cAlphaShift;
  4653. BYTE cAccumBits;
  4654. BYTE cAccumRedBits;
  4655. BYTE cAccumGreenBits;
  4656. BYTE cAccumBlueBits;
  4657. BYTE cAccumAlphaBits;
  4658. BYTE cDepthBits;
  4659. BYTE cStencilBits;
  4660. BYTE cAuxBuffers;
  4661. BYTE iLayerPlane;
  4662. BYTE bReserved;
  4663. COLORREF crTransparent;
  4664. }
  4665. typedef LAYERPLANEDESCRIPTOR* PLAYERPLANEDESCRIPTOR;
  4666. typedef LAYERPLANEDESCRIPTOR* LPLAYERPLANEDESCRIPTOR;
  4667. /* LAYERPLANEDESCRIPTOR flags */
  4668. const auto LPD_DOUBLEBUFFER = 0x00000001;
  4669. const auto LPD_STEREO = 0x00000002;
  4670. const auto LPD_SUPPORT_GDI = 0x00000010;
  4671. const auto LPD_SUPPORT_OPENGL = 0x00000020;
  4672. const auto LPD_SHARE_DEPTH = 0x00000040;
  4673. const auto LPD_SHARE_STENCIL = 0x00000080;
  4674. const auto LPD_SHARE_ACCUM = 0x00000100;
  4675. const auto LPD_SWAP_EXCHANGE = 0x00000200;
  4676. const auto LPD_SWAP_COPY = 0x00000400;
  4677. const auto LPD_TRANSPARENT = 0x00001000;
  4678. const auto LPD_TYPE_RGBA = 0;
  4679. const auto LPD_TYPE_COLORINDEX = 1;
  4680. /* wglSwapLayerBuffers flags */
  4681. const auto WGL_SWAP_MAIN_PLANE = 0x00000001;
  4682. const auto WGL_SWAP_OVERLAY1 = 0x00000002;
  4683. const auto WGL_SWAP_OVERLAY2 = 0x00000004;
  4684. const auto WGL_SWAP_OVERLAY3 = 0x00000008;
  4685. const auto WGL_SWAP_OVERLAY4 = 0x00000010;
  4686. const auto WGL_SWAP_OVERLAY5 = 0x00000020;
  4687. const auto WGL_SWAP_OVERLAY6 = 0x00000040;
  4688. const auto WGL_SWAP_OVERLAY7 = 0x00000080;
  4689. const auto WGL_SWAP_OVERLAY8 = 0x00000100;
  4690. const auto WGL_SWAP_OVERLAY9 = 0x00000200;
  4691. const auto WGL_SWAP_OVERLAY10 = 0x00000400;
  4692. const auto WGL_SWAP_OVERLAY11 = 0x00000800;
  4693. const auto WGL_SWAP_OVERLAY12 = 0x00001000;
  4694. const auto WGL_SWAP_OVERLAY13 = 0x00002000;
  4695. const auto WGL_SWAP_OVERLAY14 = 0x00004000;
  4696. const auto WGL_SWAP_OVERLAY15 = 0x00008000;
  4697. const auto WGL_SWAP_UNDERLAY1 = 0x00010000;
  4698. const auto WGL_SWAP_UNDERLAY2 = 0x00020000;
  4699. const auto WGL_SWAP_UNDERLAY3 = 0x00040000;
  4700. const auto WGL_SWAP_UNDERLAY4 = 0x00080000;
  4701. const auto WGL_SWAP_UNDERLAY5 = 0x00100000;
  4702. const auto WGL_SWAP_UNDERLAY6 = 0x00200000;
  4703. const auto WGL_SWAP_UNDERLAY7 = 0x00400000;
  4704. const auto WGL_SWAP_UNDERLAY8 = 0x00800000;
  4705. const auto WGL_SWAP_UNDERLAY9 = 0x01000000;
  4706. const auto WGL_SWAP_UNDERLAY10 = 0x02000000;
  4707. const auto WGL_SWAP_UNDERLAY11 = 0x04000000;
  4708. const auto WGL_SWAP_UNDERLAY12 = 0x08000000;
  4709. const auto WGL_SWAP_UNDERLAY13 = 0x10000000;
  4710. const auto WGL_SWAP_UNDERLAY14 = 0x20000000;
  4711. const auto WGL_SWAP_UNDERLAY15 = 0x40000000;
  4712. BOOL wglDescribeLayerPlane(HDC, int, int, UINT,
  4713. LPLAYERPLANEDESCRIPTOR);
  4714. int wglSetLayerPaletteEntries(HDC, int, int, int,
  4715. COLORREF *);
  4716. int wglGetLayerPaletteEntries(HDC, int, int, int,
  4717. COLORREF *);
  4718. BOOL wglRealizeLayerPalette(HDC, int, BOOL);
  4719. BOOL wglSwapLayerBuffers(HDC, UINT);
  4720. struct WGLSWAP {
  4721. HDC hdc;
  4722. UINT uiFlags;
  4723. }
  4724. typedef WGLSWAP* PWGLSWAP;
  4725. typedef WGLSWAP* LPWGLSWAP;
  4726. const auto WGL_SWAPMULTIPLE_MAX = 16;
  4727. DWORD wglSwapMultipleBuffers(UINT, WGLSWAP *);