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 /// Automatically imported and edited from the druntime module
11 /// core.sys.windows.windef for the auto-generated win32 package.
12 module win32.windef;
13 //version (Windows):
14 @system:
15 
16 public import win32.winnt;
17 import win32.w32api;
18 
19 enum size_t MAX_PATH = 260;
20 
21 pure nothrow @nogc {
22     ushort MAKEWORD()(ubyte a, ubyte b) {
23         return cast(ushort) ((b << 8) | a);
24     }
25 
26     ushort MAKEWORD()(ushort a, ushort b) {
27         assert((a & 0xFF00) == 0);
28         assert((b & 0xFF00) == 0);
29         return MAKEWORD(cast(ubyte)a, cast(ubyte)b);
30     }
31 
32     uint MAKELONG()(ushort a, ushort b) {
33         return cast(uint) ((b << 16) | a);
34     }
35 
36     uint MAKELONG()(uint a, uint b) {
37         assert((a & 0xFFFF0000) == 0);
38         assert((b & 0xFFFF0000) == 0);
39         return MAKELONG(cast(ushort)a, cast(ushort)b);
40     }
41 
42     ushort LOWORD()(ulong l) {
43         return cast(ushort) l;
44     }
45 
46     ushort HIWORD()(ulong l) {
47         return cast(ushort) (l >>> 16);
48     }
49 
50     ubyte LOBYTE()(ushort w) {
51         return cast(ubyte) w;
52     }
53 
54     ubyte HIBYTE()(ushort w) {
55         return cast(ubyte) (w >>> 8);
56     }
57 }
58 
59 enum NULL = null;
60 static assert (is(typeof({
61     void test()(int* p) {}
62     test(NULL);
63 })));
64 
65 alias ubyte        BYTE;
66 alias ubyte*       PBYTE, LPBYTE;
67 alias ushort       USHORT, WORD, ATOM;
68 alias ushort*      PUSHORT, PWORD, LPWORD;
69 alias uint         ULONG, DWORD, UINT, COLORREF;
70 alias uint*        PULONG, PDWORD, LPDWORD, PUINT, LPUINT, LPCOLORREF;
71 alias int          WINBOOL, BOOL, INT, LONG, HFILE, HRESULT;
72 alias int*         PWINBOOL, LPWINBOOL, PBOOL, LPBOOL, PINT, LPINT, LPLONG;
73 alias float        FLOAT;
74 alias float*       PFLOAT;
75 alias const(void)* PCVOID, LPCVOID;
76 
77 alias UINT_PTR WPARAM;
78 alias LONG_PTR LPARAM, LRESULT;
79 
80 mixin DECLARE_HANDLE!("HHOOK");
81 mixin DECLARE_HANDLE!("HGLOBAL");
82 mixin DECLARE_HANDLE!("HLOCAL");
83 mixin DECLARE_HANDLE!("GLOBALHANDLE");
84 mixin DECLARE_HANDLE!("LOCALHANDLE");
85 mixin DECLARE_HANDLE!("HGDIOBJ");
86 mixin DECLARE_HANDLE!("HACCEL");
87 mixin DECLARE_HANDLE!("HBITMAP", HGDIOBJ);
88 mixin DECLARE_HANDLE!("HBRUSH", HGDIOBJ);
89 mixin DECLARE_HANDLE!("HCOLORSPACE");
90 mixin DECLARE_HANDLE!("HDC");
91 mixin DECLARE_HANDLE!("HGLRC");
92 mixin DECLARE_HANDLE!("HDESK");
93 mixin DECLARE_HANDLE!("HENHMETAFILE");
94 mixin DECLARE_HANDLE!("HFONT", HGDIOBJ);
95 mixin DECLARE_HANDLE!("HICON");
96 mixin DECLARE_HANDLE!("HINSTANCE");
97 mixin DECLARE_HANDLE!("HKEY");
98 mixin DECLARE_HANDLE!("HMENU");
99 mixin DECLARE_HANDLE!("HMETAFILE");
100 mixin DECLARE_HANDLE!("HMODULE");
101 mixin DECLARE_HANDLE!("HMONITOR");
102 mixin DECLARE_HANDLE!("HPALETTE");
103 mixin DECLARE_HANDLE!("HPEN", HGDIOBJ);
104 mixin DECLARE_HANDLE!("HRGN", HGDIOBJ);
105 mixin DECLARE_HANDLE!("HRSRC");
106 mixin DECLARE_HANDLE!("HSTR");
107 mixin DECLARE_HANDLE!("HTASK");
108 mixin DECLARE_HANDLE!("HWND");
109 mixin DECLARE_HANDLE!("HWINSTA");
110 mixin DECLARE_HANDLE!("HKL");
111 mixin DECLARE_HANDLE!("HCURSOR");
112 alias HKEY* PHKEY;
113 
114 static if (_WIN32_WINNT >= 0x500) {
115     mixin DECLARE_HANDLE!("HTERMINAL");
116     mixin DECLARE_HANDLE!("HWINEVENTHOOK");
117 }
118 
119 alias extern (Windows) INT_PTR function() nothrow FARPROC, NEARPROC, PROC;
120 
121 struct RECT {
122     LONG left;
123     LONG top;
124     LONG right;
125     LONG bottom;
126 }
127 alias RECT RECTL;
128 alias RECT*        PRECT, NPRECT, LPRECT, PRECTL, LPRECTL;
129 alias const(RECT)* LPCRECT, LPCRECTL;
130 
131 struct POINT {
132     LONG x;
133     LONG y;
134 }
135 alias POINT POINTL;
136 alias POINT* PPOINT, NPPOINT, LPPOINT, PPOINTL, LPPOINTL;
137 
138 struct SIZE {
139     LONG cx;
140     LONG cy;
141 }
142 alias SIZE SIZEL;
143 alias SIZE* PSIZE, LPSIZE, PSIZEL, LPSIZEL;
144 
145 struct POINTS {
146     SHORT x;
147     SHORT y;
148 }
149 alias POINTS* PPOINTS, LPPOINTS;
150 
151 enum : BOOL {
152     FALSE = 0,
153     TRUE  = 1
154 }