/binding/win32/windef.d

http://github.com/wilkie/djehuty · D · 317 lines · 224 code · 70 blank · 23 comment · 2 complexity · 2a0dce7dbb882da862bc1af308d53162 MD5 · raw file

  1. /*
  2. * windef.d
  3. *
  4. * This module is a port of windef.h to D.
  5. * The original copyright notice appears after this information block.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: July 7th, 2009
  9. *
  10. */
  11. /****************************************************************************
  12. * *
  13. * windef.h -- Basic Windows Type Definitions *
  14. * *
  15. * Copyright (c) Microsoft Corporation. All rights reserved. *
  16. * *
  17. ****************************************************************************/
  18. module binding.win32.windef;
  19. import binding.win32.winnt;
  20. import binding.c;
  21. extern(System):
  22. alias Culong_t ULONG;
  23. alias ULONG* PULONG;
  24. alias ushort USHORT;
  25. alias USHORT* PUSHORT;
  26. alias ubyte UCHAR;
  27. alias UCHAR* PUCHAR;
  28. alias char* PSZ;
  29. alias size_t SIZE_T;
  30. alias size_t* PSIZE_T;
  31. alias ULONG PROPID;
  32. const auto MAX_PATH = 260;
  33. enum : uint {
  34. FALSE = 0,
  35. TRUE = 1
  36. }
  37. version(X86_64) {
  38. alias ulong DWORD;
  39. }
  40. else {
  41. alias uint DWORD;
  42. }
  43. alias ulong DWORD64;
  44. alias int BOOL;
  45. alias ubyte BYTE;
  46. alias ushort WORD;
  47. alias float FLOAT;
  48. alias FLOAT* PFLOAT;
  49. alias BOOL* PBOOL;
  50. alias BOOL* LPBOOL;
  51. alias BYTE* PBYTE;
  52. alias BYTE* LPBYTE;
  53. alias int* PINT;
  54. alias int* LPINT;
  55. alias WORD* PWORD;
  56. alias WORD* LPWORD;
  57. alias Clong_t* LPLONG;
  58. alias DWORD* PDWORD;
  59. alias DWORD* LPDWORD;
  60. alias void VOID;
  61. alias void* LPVOID;
  62. alias void* LPCVOID;
  63. alias int INT;
  64. alias uint UINT;
  65. alias uint* PUINT;
  66. alias long LONG64;
  67. alias long* PLONG64;
  68. alias ulong ULONG64;
  69. alias ulong* PULONG64;
  70. alias Culong_t ULONG_PTR;
  71. alias Culong_t** PULONG_PTR;
  72. alias Clong_t LONG_PTR;
  73. alias Clong_t** PLONG_PTR;
  74. alias LONG_PTR INT_PTR;
  75. alias ULONG_PTR UINT_PTR;
  76. alias UINT** PUINT_PTR;
  77. alias Culong_t** PDWORD_PTR;
  78. alias ULONG_PTR DWORD_PTR;
  79. alias ubyte UINT8;
  80. alias ushort UINT16;
  81. alias uint UINT32;
  82. alias ulong UINT64;
  83. alias byte INT8;
  84. alias short INT16;
  85. alias int INT32;
  86. alias long INT64;
  87. alias ulong QWORD;
  88. alias long* LONGLONG_PTR;
  89. alias ulong* ULONGLONG_PTR;
  90. /* Types use for passing & returning polymorphic values */
  91. alias UINT_PTR WPARAM;
  92. alias LONG_PTR LPARAM;
  93. alias LONG_PTR LRESULT;
  94. WORD MAKEWORD(WORD a, WORD b) {
  95. return (cast(WORD)((cast(BYTE)(cast(DWORD_PTR)(a) & 0xff)) | (cast(WORD)(cast(BYTE)(cast(DWORD_PTR)(b) & 0xff))) << 8));
  96. }
  97. LONG MAKELONG(LONG a, LONG b) {
  98. return (cast(LONG)((cast(WORD)(cast(DWORD_PTR)(a) & 0xffff)) | (cast(DWORD)(cast(WORD)(cast(DWORD_PTR)(b) & 0xffff))) << 16));
  99. }
  100. WORD LOWORD(LONG l) {
  101. return (cast(WORD)(cast(DWORD_PTR)(l) & 0xffff));
  102. }
  103. WORD HIWORD(LONG l) {
  104. return (cast(WORD)(cast(DWORD_PTR)(l) >> 16));
  105. }
  106. BYTE LOBYTE(WORD w) {
  107. return (cast(BYTE)(cast(DWORD_PTR)(w) & 0xff));
  108. }
  109. BYTE HIBYTE(WORD w) {
  110. return (cast(BYTE)(cast(DWORD_PTR)(w) >> 8));
  111. }
  112. alias WORD ATOM;
  113. alias HANDLE* SPHANDLE;
  114. alias HANDLE* LPHANDLE;
  115. alias HANDLE HGLOBAL;
  116. alias HANDLE HLOCAL;
  117. alias HANDLE GLOBALHANDLE;
  118. alias HANDLE LOCALHANDLE;
  119. version(X86_64) {
  120. alias INT_PTR function() FARPROC;
  121. alias INT_PTR function() NEARPROC;
  122. alias INT_PTR function() PROC;
  123. }
  124. else {
  125. alias int function() FARPROC;
  126. alias int function() NEARPROC;
  127. alias int function() PROC;
  128. }
  129. alias void* HGDIOBJ;
  130. alias HANDLE HKEY;
  131. alias HKEY* PHKEY;
  132. alias HANDLE (HACCEL);
  133. alias HANDLE (HBITMAP);
  134. alias HANDLE (HBRUSH);
  135. alias HANDLE (HCOLORSPACE);
  136. alias HANDLE (HDC);
  137. alias HANDLE (HGLRC); // OpenGL
  138. alias HANDLE (HDESK);
  139. alias HANDLE (HENHMETAFILE);
  140. alias HANDLE (HFONT);
  141. alias HANDLE (HICON);
  142. alias HANDLE (HMENU);
  143. alias HANDLE (HHOOK);
  144. alias HANDLE (HMETAFILE);
  145. alias HANDLE (HINSTANCE);
  146. alias HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */
  147. alias HANDLE (HPALETTE);
  148. alias HANDLE (HPEN);
  149. alias HANDLE (HRGN);
  150. alias HANDLE (HRSRC);
  151. alias HANDLE (HSPRITE);
  152. alias HANDLE (HSTR);
  153. alias HANDLE (HTASK);
  154. alias HANDLE (HWINSTA);
  155. alias HANDLE (HKL);
  156. alias HANDLE (HWND);
  157. alias HANDLE HWINEVENTHOOK;
  158. alias HANDLE HMONITOR;
  159. alias int HFILE;
  160. alias HICON HCURSOR; /* HICONs & HCURSORs are polymorphic */
  161. alias DWORD COLORREF;
  162. alias DWORD *LPCOLORREF;
  163. const auto HFILE_ERROR = (cast(HFILE)-1);
  164. struct RECT {
  165. LONG left;
  166. LONG top;
  167. LONG right;
  168. LONG bottom;
  169. }
  170. alias RECT* PRECT;
  171. alias RECT* NPRECT;
  172. alias RECT* LPRECT;
  173. alias RECT* LPCRECT;
  174. struct RECTL { /* rcl */
  175. LONG left;
  176. LONG top;
  177. LONG right;
  178. LONG bottom;
  179. }
  180. alias RECTL* PRECTL;
  181. alias RECTL* LPRECTL;
  182. alias RECTL* LPCRECTL;
  183. struct POINT {
  184. LONG x;
  185. LONG y;
  186. }
  187. alias POINT* PPOINT;
  188. alias POINT* NPPOINT;
  189. alias POINT* LPPOINT;
  190. struct POINTL { /* ptl */
  191. LONG x;
  192. LONG y;
  193. }
  194. alias POINTL* PPOINTL;
  195. alias POINTL* LPPOINTL;
  196. struct SIZE {
  197. LONG cx;
  198. LONG cy;
  199. }
  200. alias SIZE* PSIZE;
  201. alias SIZE* LPSIZE;
  202. alias SIZE SIZEL;
  203. alias SIZE* PSIZEL;
  204. alias SIZE* LPSIZEL;
  205. struct POINTS {
  206. SHORT y;
  207. SHORT x;
  208. }
  209. alias POINTS* PPOINTS;
  210. alias POINTS* LPPOINTS;
  211. //
  212. // File System time stamps are represented with the following structure:
  213. //
  214. struct FILETIME {
  215. DWORD dwLowDateTime;
  216. DWORD dwHighDateTime;
  217. }
  218. alias FILETIME* PFILETIME;
  219. alias FILETIME* LPFILETIME;
  220. /* mode selections for the device mode function */
  221. const auto DM_UPDATE = 1;
  222. const auto DM_COPY = 2;
  223. const auto DM_PROMPT = 4;
  224. const auto DM_MODIFY = 8;
  225. const auto DM_IN_BUFFER = DM_MODIFY;
  226. const auto DM_IN_PROMPT = DM_PROMPT;
  227. const auto DM_OUT_BUFFER = DM_COPY;
  228. const auto DM_OUT_DEFAULT = DM_UPDATE;
  229. /* device capabilities indices */
  230. const auto DC_FIELDS = 1;
  231. const auto DC_PAPERS = 2;
  232. const auto DC_PAPERSIZE = 3;
  233. const auto DC_MINEXTENT = 4;
  234. const auto DC_MAXEXTENT = 5;
  235. const auto DC_BINS = 6;
  236. const auto DC_DUPLEX = 7;
  237. const auto DC_SIZE = 8;
  238. const auto DC_EXTRA = 9;
  239. const auto DC_VERSION = 10;
  240. const auto DC_DRIVER = 11;
  241. const auto DC_BINNAMES = 12;
  242. const auto DC_ENUMRESOLUTIONS = 13;
  243. const auto DC_FILEDEPENDENCIES = 14;
  244. const auto DC_TRUETYPE = 15;
  245. const auto DC_PAPERNAMES = 16;
  246. const auto DC_ORIENTATION = 17;
  247. const auto DC_COPIES = 18;