1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_windef.d)
9  */
10 module nulib.system.win32.windef;
11 
12 
13 public import nulib.system.win32.winnt;
14 import nulib.system.win32.w32api;
15 
16 enum size_t MAX_PATH = 260;
17 
18 pure nothrow @nogc {
19     ushort MAKEWORD(ubyte a, ubyte b) {
20         return cast(ushort) ((b << 8) | a);
21     }
22 
23     ushort MAKEWORD(ushort a, ushort b) {
24         assert((a & 0xFF00) == 0);
25         assert((b & 0xFF00) == 0);
26         return MAKEWORD(cast(ubyte)a, cast(ubyte)b);
27     }
28 
29     uint MAKELONG(ushort a, ushort b) {
30         return cast(uint) ((b << 16) | a);
31     }
32 
33     uint MAKELONG(uint a, uint b) {
34         assert((a & 0xFFFF0000) == 0);
35         assert((b & 0xFFFF0000) == 0);
36         return MAKELONG(cast(ushort)a, cast(ushort)b);
37     }
38 
39     ushort LOWORD(ulong l) {
40         return cast(ushort) l;
41     }
42 
43     ushort HIWORD(ulong l) {
44         return cast(ushort) (l >>> 16);
45     }
46 
47     ubyte LOBYTE(ushort w) {
48         return cast(ubyte) w;
49     }
50 
51     ubyte HIBYTE(ushort w) {
52         return cast(ubyte) (w >>> 8);
53     }
54 }
55 
56 enum NULL = null;
57 static assert (is(typeof({
58     void test(int* p) {}
59     test(NULL);
60 })));
61 
62 alias ubyte        BYTE;
63 alias PBYTE = ubyte*;
64 alias LPBYTE = ubyte*;
65 alias USHORT = ushort;
66 alias WORD = ushort;
67 alias ATOM = ushort;
68 alias PUSHORT = ushort*;
69 alias PWORD = ushort*;
70 alias LPWORD = ushort*;
71 alias ULONG = uint;
72 alias DWORD = uint;
73 alias UINT = uint;
74 alias COLORREF = uint;
75 alias PULONG = uint*;
76 alias PDWORD = uint*;
77 alias LPDWORD = uint*;
78 alias PUINT = uint*;
79 alias LPUINT = uint*;
80 alias LPCOLORREF = uint*;
81 alias WINBOOL = int;
82 alias BOOL = int;
83 alias INT = int;
84 alias LONG = int;
85 alias HFILE = int;
86 alias HRESULT = int;
87 alias PWINBOOL = int*;
88 alias LPWINBOOL = int*;
89 alias PBOOL = int*;
90 alias LPBOOL = int*;
91 alias PINT = int*;
92 alias LPINT = int*;
93 alias LPLONG = int*;
94 alias FLOAT = float ;
95 alias PFLOAT = float*;
96 alias PCVOID = const(void)*;
97 alias LPCVOID = const(void)*;
98 
99 alias WPARAM = UINT_PTR;
100 alias LPARAM = LONG_PTR;
101 alias LRESULT = LONG_PTR;
102 
103 alias HHOOK = HANDLE;
104 alias HGLOBAL = HANDLE;
105 alias HLOCAL = HANDLE;
106 alias GLOBALHANDLE = HANDLE;
107 alias LOCALHANDLE = HANDLE;
108 alias HGDIOBJ = HANDLE;
109 alias HACCEL = HANDLE;
110 alias HBITMAP = HGDIOBJ;
111 alias HBRUSH = HGDIOBJ;
112 alias HCOLORSPACE = HANDLE;
113 alias HDC = HANDLE;
114 alias HGLRC = HANDLE;
115 alias HDESK = HANDLE;
116 alias HENHMETAFILE = HANDLE;
117 alias HFONT = HGDIOBJ;
118 alias HICON = HANDLE;
119 alias HINSTANCE = HANDLE;
120 alias HKEY = HANDLE;
121 alias HMENU = HANDLE;
122 alias HMETAFILE = HANDLE;
123 alias HMODULE = HANDLE;
124 alias HMONITOR = HANDLE;
125 alias HPALETTE = HANDLE;
126 alias HPEN = HGDIOBJ;
127 alias HRGN = HGDIOBJ;
128 alias HRSRC = HANDLE;
129 alias HSTR = HANDLE;
130 alias HTASK = HANDLE;
131 alias HWND = HANDLE;
132 alias HWINSTA = HANDLE;
133 alias HKL = HANDLE;
134 alias HCURSOR = HANDLE;
135 alias PHKEY = HKEY*;
136 
137 static if (_WIN32_WINNT >= 0x500) {
138     alias HTERMINAL = HANDLE;
139     alias HWINEVENTHOOK = HANDLE;
140 }
141 
142 alias extern (Windows) INT_PTR function() nothrow FARPROC, NEARPROC, PROC;
143 
144 struct RECT {
145     LONG left;
146     LONG top;
147     LONG right;
148     LONG bottom;
149 }
150 alias RECTL = RECT;
151 alias PRECT = RECT*;
152 alias NPRECT = RECT*;
153 alias LPRECT = RECT*;
154 alias PRECTL = RECT*;
155 alias LPRECTL = RECT*;
156 alias const(RECT)* LPCRECT, LPCRECTL;
157 
158 struct POINT {
159     LONG x;
160     LONG y;
161 }
162 alias POINTL = POINT;
163 alias PPOINT = POINT*;
164 alias NPPOINT = POINT*;
165 alias LPPOINT = POINT*;
166 alias PPOINTL = POINT*;
167 alias LPPOINTL = POINT*;
168 
169 struct SIZE {
170     LONG cx;
171     LONG cy;
172 }
173 alias SIZEL = SIZE;
174 alias PSIZE = SIZE*;
175 alias LPSIZE = SIZE*;
176 alias PSIZEL = SIZE*;
177 alias LPSIZEL = SIZE*;
178 
179 struct POINTS {
180     SHORT x;
181     SHORT y;
182 }
183 alias PPOINTS = POINTS*;
184 alias LPPOINTS = POINTS*;
185 
186 enum : BOOL {
187     FALSE = 0,
188     TRUE  = 1
189 }