1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Vladimir Vlasov
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_prsht.d)
9  */
10 module nulib.system.win32.prsht;
11 
12 
13 version (ANSI) {} else version = Unicode;
14 pragma(lib, "comctl32");
15 
16 import nulib.system.win32.w32api, nulib.system.win32.windef, nulib.system.win32.winuser;
17 
18 enum MAXPROPPAGES = 100;
19 
20 enum {
21     PSP_DEFAULT      = 0x00000000,
22     PSP_DLGINDIRECT  = 0x00000001,
23     PSP_USEHICON     = 0x00000002,
24     PSP_USEICONID    = 0x00000004,
25     PSP_USETITLE     = 0x00000008,
26     PSP_RTLREADING   = 0x00000010,
27     PSP_HASHELP      = 0x00000020,
28     PSP_USEREFPARENT = 0x00000040,
29     PSP_USECALLBACK  = 0x00000080,
30     PSP_PREMATURE    = 0x00000400
31 }
32 
33 static if (_WIN32_IE >= 0x400) {
34     enum {
35         PSP_HIDEHEADER        = 0x00000800,
36         PSP_USEHEADERTITLE    = 0x00001000,
37         PSP_USEHEADERSUBTITLE = 0x00002000
38     }
39 }
40 
41 enum {
42     PSPCB_RELEASE = 1,
43     PSPCB_CREATE
44 }
45 
46 enum {
47     PSH_DEFAULT           = 0x00000000,
48     PSH_PROPTITLE         = 0x00000001,
49     PSH_USEHICON          = 0x00000002,
50     PSH_USEICONID         = 0x00000004,
51     PSH_PROPSHEETPAGE     = 0x00000008,
52     PSH_WIZARDHASFINISH   = 0x00000010,
53     PSH_WIZARD            = 0x00000020,
54     PSH_USEPSTARTPAGE     = 0x00000040,
55     PSH_NOAPPLYNOW        = 0x00000080,
56     PSH_USECALLBACK       = 0x00000100,
57     PSH_HASHELP           = 0x00000200,
58     PSH_MODELESS          = 0x00000400,
59     PSH_RTLREADING        = 0x00000800,
60     PSH_WIZARDCONTEXTHELP = 0x00001000
61 }
62 
63 static if (_WIN32_IE >= 0x400) {
64     enum {
65         PSH_WATERMARK        = 0x00008000,
66         PSH_USEHBMWATERMARK  = 0x00010000,
67         PSH_USEHPLWATERMARK  = 0x00020000,
68         PSH_STRETCHWATERMARK = 0x00040000,
69         PSH_HEADER           = 0x00080000,
70         PSH_USEHBMHEADER     = 0x00100000,
71         PSH_USEPAGELANG      = 0x00200000
72     }
73     static if (_WIN32_IE < 0x0500) {
74         enum {
75             PSH_WIZARD97 = 0x00002000
76         }
77     } else {
78         enum {
79             PSH_WIZARD97 = 0x01000000
80         }
81     }
82 }
83 
84 static if (_WIN32_IE >= 0x500) {
85     enum {
86         PSH_WIZARD_LITE   = 0x00400000,
87         PSH_NOCONTEXTHELP = 0x02000000
88     }
89 }
90 
91 enum {
92     PSCB_INITIALIZED = 1,
93     PSCB_PRECREATE
94 }
95 
96 enum {
97     PSN_FIRST       = (-200),
98     PSN_LAST        = (-299),
99     PSN_SETACTIVE   = (-200),
100     PSN_KILLACTIVE  = (-201),
101     PSN_APPLY       = (-202),
102     PSN_RESET       = (-203),
103     PSN_HELP        = (-205),
104     PSN_WIZBACK     = (-206),
105     PSN_WIZNEXT     = (-207),
106     PSN_WIZFINISH   = (-208),
107     PSN_QUERYCANCEL = (-209)
108 }
109 static if (_WIN32_IE >= 0x400) {
110     enum {
111         PSN_GETOBJECT = (-210)
112     }
113 }
114 static if (_WIN32_IE >= 0x500) {
115     enum {
116         PSN_TRANSLATEACCELERATOR = (-212),
117         PSN_QUERYINITIALFOCUS    = (-213)
118     }
119 }
120 
121 enum {
122     PSNRET_NOERROR,
123     PSNRET_INVALID,
124     PSNRET_INVALID_NOCHANGEPAGE,
125     PSNRET_MESSAGEHANDLED
126 }
127 
128 enum {
129     ID_PSRESTARTWINDOWS = 0x2,
130     ID_PSREBOOTSYSTEM   = ID_PSRESTARTWINDOWS | 0x1
131 }
132 
133 enum {
134     WIZ_CXDLG  = 276,
135     WIZ_CYDLG  = 140,
136     WIZ_CXBMP  = 80,
137     WIZ_BODYX  = 92,
138     WIZ_BODYCX = 184
139 }
140 
141 enum {
142     PROP_SM_CXDLG  = 212,
143     PROP_SM_CYDLG  = 188,
144     PROP_MED_CXDLG = 227,
145     PROP_MED_CYDLG = 215,
146     PROP_LG_CXDLG  = 252,
147     PROP_LG_CYDLG  = 218
148 }
149 
150 enum {
151     PSBTN_BACK,
152     PSBTN_NEXT,
153     PSBTN_FINISH,
154     PSBTN_OK,
155     PSBTN_APPLYNOW,
156     PSBTN_CANCEL,
157     PSBTN_HELP,
158     PSBTN_MAX = 6
159 }
160 
161 enum {
162     PSWIZB_BACK           = 1,
163     PSWIZB_NEXT           = 2,
164     PSWIZB_FINISH         = 4,
165     PSWIZB_DISABLEDFINISH = 8
166 }
167 
168 enum {
169     PSM_SETCURSEL = WM_USER + 101,
170     PSM_REMOVEPAGE,
171     PSM_ADDPAGE,
172     PSM_CHANGED,
173     PSM_RESTARTWINDOWS,
174     PSM_REBOOTSYSTEM,
175     PSM_CANCELTOCLOSE,
176     PSM_QUERYSIBLINGS,
177     PSM_UNCHANGED,
178     PSM_APPLY,
179     PSM_SETTITLEA,
180     PSM_SETWIZBUTTONS,
181     PSM_PRESSBUTTON,
182     PSM_SETCURSELID,
183     PSM_SETFINISHTEXTA,
184     PSM_GETTABCONTROL,
185     PSM_ISDIALOGMESSAGE,
186     PSM_GETCURRENTPAGEHWND,
187     PSM_INSERTPAGE,
188     PSM_SETTITLEW,
189     PSM_SETFINISHTEXTW // = WM_USER + 121,
190 }
191 
192 extern (Windows) {
193     alias UINT function(HWND, UINT, LPPROPSHEETPAGEA) LPFNPSPCALLBACKA;
194     alias UINT function(HWND, UINT, LPPROPSHEETPAGEW) LPFNPSPCALLBACKW;
195     alias int function(HWND, UINT, LPARAM) PFNPROPSHEETCALLBACK;
196 }
197 
198 align(4):
199 
200 struct PROPSHEETPAGEA {
201     DWORD dwSize = PROPSHEETPAGEA.sizeof;
202     DWORD dwFlags;
203     HINSTANCE hInstance;
204     union {
205         LPCSTR         pszTemplate;
206         LPCDLGTEMPLATE pResource;
207     }
208     union {
209         HICON  hIcon;
210         LPCSTR pszIcon;
211     }
212     LPCSTR  pszTitle;
213     DLGPROC pfnDlgProc;
214     LPARAM  lParam;
215     LPFNPSPCALLBACKA pfnCallback;
216     UINT*     pcRefParent;
217     static if (_WIN32_IE >= 0x400) {
218         LPCSTR pszHeaderTitle;
219         LPCSTR pszHeaderSubTitle;
220     }
221 }
222 alias PROPSHEETPAGEA*        LPPROPSHEETPAGEA;
223 alias LPCPROPSHEETPAGEA = const(PROPSHEETPAGEA)*;
224 
225 struct PROPSHEETPAGEW {
226     DWORD     dwSize = PROPSHEETPAGEW.sizeof;
227     DWORD     dwFlags;
228     HINSTANCE hInstance;
229     union {
230         LPCWSTR        pszTemplate;
231         LPCDLGTEMPLATE pResource;
232     }
233     union {
234         HICON   hIcon;
235         LPCWSTR pszIcon;
236     }
237     LPCWSTR   pszTitle;
238     DLGPROC   pfnDlgProc;
239     LPARAM    lParam;
240     LPFNPSPCALLBACKW pfnCallback;
241     UINT*     pcRefParent;
242     static if (_WIN32_IE >= 0x400) {
243         LPCWSTR pszHeaderTitle;
244         LPCWSTR pszHeaderSubTitle;
245     }
246 }
247 alias LPPROPSHEETPAGEW = PROPSHEETPAGEW*;
248 alias LPCPROPSHEETPAGEW = const(PROPSHEETPAGEW)*;
249 alias HPROPSHEETPAGE = HANDLE;
250 
251 struct PROPSHEETHEADERA {
252     DWORD dwSize = PROPSHEETHEADERA.sizeof;
253     DWORD dwFlags;
254     HWND  hwndParent;
255     HINSTANCE hInstance;
256     union {
257         HICON   hIcon;
258         LPCSTR  pszIcon;
259     }
260     LPCSTR pszCaption;
261     UINT   nPages;
262     union {
263         UINT   nStartPage;
264         LPCSTR pStartPage;
265     }
266     union {
267         LPCPROPSHEETPAGEA ppsp;
268         HPROPSHEETPAGE*   phpage;
269     }
270     PFNPROPSHEETCALLBACK pfnCallback;
271     static if (_WIN32_IE >= 0x400) {
272         union {
273             HBITMAP hbmWatermark;
274             LPCSTR  pszbmWatermark;
275         }
276         HPALETTE hplWatermark;
277         union {
278             HBITMAP hbmHeader;
279             LPCSTR  pszbmHeader;
280         }
281     }
282 }
283 alias PROPSHEETHEADERA*        LPPROPSHEETHEADERA;
284 alias LPCPROPSHEETHEADERA = const(PROPSHEETHEADERA)*;
285 
286 struct PROPSHEETHEADERW {
287     DWORD     dwSize = PROPSHEETHEADERW.sizeof;
288     DWORD     dwFlags;
289     HWND      hwndParent;
290     HINSTANCE hInstance;
291     union {
292         HICON   hIcon;
293         LPCWSTR pszIcon;
294     }
295     LPCWSTR   pszCaption;
296     UINT      nPages;
297     union {
298         UINT    nStartPage;
299         LPCWSTR pStartPage;
300     }
301     union {
302         LPCPROPSHEETPAGEW ppsp;
303         HPROPSHEETPAGE*   phpage;
304     }
305     PFNPROPSHEETCALLBACK pfnCallback;
306     static if (_WIN32_IE >= 0x400) {
307         union {
308             HBITMAP hbmWatermark;
309             LPCWSTR pszbmWatermark;
310         }
311         HPALETTE hplWatermark;
312         union {
313             HBITMAP hbmHeader;
314             LPCWSTR pszbmHeader;
315         }
316     }
317 }
318 alias PROPSHEETHEADERW*        LPPROPSHEETHEADERW;
319 alias LPCPROPSHEETHEADERW = const(PROPSHEETHEADERW)*;
320 
321 extern (Windows) {
322     alias BOOL function(HPROPSHEETPAGE, LPARAM) LPFNADDPROPSHEETPAGE;
323     alias BOOL function(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM)
324       LPFNADDPROPSHEETPAGES;
325 }
326 
327 struct PSHNOTIFY {
328     NMHDR  hdr;
329     LPARAM lParam;
330 }
331 alias LPPSHNOTIFY = PSHNOTIFY*;
332 
333 extern (Windows) nothrow @nogc {
334     HPROPSHEETPAGE CreatePropertySheetPageA(LPCPROPSHEETPAGEA);
335     HPROPSHEETPAGE CreatePropertySheetPageW(LPCPROPSHEETPAGEW);
336     BOOL DestroyPropertySheetPage(HPROPSHEETPAGE);
337     INT_PTR PropertySheetA(LPCPROPSHEETHEADERA);
338     INT_PTR PropertySheetW(LPCPROPSHEETHEADERW);
339 }
340 
341 version (Unicode) {
342     alias LPFNPSPCALLBACKW         LPFNPSPCALLBACK;
343     alias PROPSHEETPAGEW           PROPSHEETPAGE;
344     alias LPPROPSHEETPAGEW         LPPROPSHEETPAGE;
345     alias LPCPROPSHEETPAGEW        LPCPROPSHEETPAGE;
346     alias PROPSHEETHEADERW         PROPSHEETHEADER;
347     alias LPPROPSHEETHEADERW       LPPROPSHEETHEADER;
348     alias LPCPROPSHEETHEADERW      LPCPROPSHEETHEADER;
349     alias PSM_SETTITLEW            PSM_SETTITLE;
350     alias PSM_SETFINISHTEXTW       PSM_SETFINISHTEXT;
351     alias CreatePropertySheetPage = CreatePropertySheetPageW;
352     alias PropertySheetW           PropertySheet;
353 } else {
354     alias LPFNPSPCALLBACKA         LPFNPSPCALLBACK;
355     alias PROPSHEETPAGEA           PROPSHEETPAGE;
356     alias LPPROPSHEETPAGEA         LPPROPSHEETPAGE;
357     alias LPCPROPSHEETPAGEA        LPCPROPSHEETPAGE;
358     alias PROPSHEETHEADERA         PROPSHEETHEADER;
359     alias LPPROPSHEETHEADERA       LPPROPSHEETHEADER;
360     alias LPCPROPSHEETHEADERA      LPCPROPSHEETHEADER;
361     alias PSM_SETTITLEA            PSM_SETTITLE;
362     alias PSM_SETFINISHTEXTA       PSM_SETFINISHTEXT;
363     alias CreatePropertySheetPage = CreatePropertySheetPageA;
364     alias PropertySheetA           PropertySheet;
365 }
366 
367 BOOL PropSheet_SetCurSel(HWND hPropSheetDlg, HPROPSHEETPAGE hpage,
368       HPROPSHEETPAGE index) {
369     return cast(BOOL) SendMessage(hPropSheetDlg, PSM_SETCURSEL,
370       cast(WPARAM) index, cast(LPARAM) hpage);
371 }
372 
373 VOID PropSheet_RemovePage(HWND hPropSheetDlg, int index, HPROPSHEETPAGE hpage) {
374     SendMessage(hPropSheetDlg, PSM_REMOVEPAGE, index, cast(LPARAM) hpage);
375 }
376 
377 BOOL PropSheet_AddPage(HWND hPropSheetDlg, HPROPSHEETPAGE hpage) {
378         return cast(BOOL) SendMessage(hPropSheetDlg, PSM_ADDPAGE,
379           0, cast(LPARAM) hpage);
380 }
381 
382 VOID PropSheet_Changed(HWND hPropSheetDlg, HWND hwndPage) {
383     SendMessage(hPropSheetDlg, PSM_CHANGED, cast(WPARAM) hwndPage, 0);
384 }
385 
386 VOID PropSheet_RestartWindows(HWND hPropSheetDlg) {
387     SendMessage(hPropSheetDlg, PSM_RESTARTWINDOWS, 0, 0);
388 }
389 
390 VOID PropSheet_RebootSystem(HWND hPropSheetDlg) {
391     SendMessage(hPropSheetDlg, PSM_REBOOTSYSTEM, 0, 0);
392 }
393 
394 VOID PropSheet_CancelToClose(HWND hPropSheetDlg) {
395     SendMessage(hPropSheetDlg, PSM_CANCELTOCLOSE, 0, 0);
396 }
397 
398 int PropSheet_QuerySiblings(HWND hPropSheetDlg, WPARAM param1, LPARAM param2) {
399     return cast(int) SendMessage(hPropSheetDlg, PSM_QUERYSIBLINGS, param1, param2);
400 }
401 
402 VOID PropSheet_UnChanged(HWND hPropSheetDlg, HWND hwndPage) {
403     SendMessage(hPropSheetDlg, PSM_UNCHANGED, cast(WPARAM) hwndPage, 0);
404 }
405 
406 BOOL PropSheet_Apply(HWND hPropSheetDlg) {
407     return cast(BOOL) SendMessage(hPropSheetDlg, PSM_APPLY, 0, 0);
408 }
409 
410 VOID PropSheet_SetTitle(HWND hPropSheetDlg, DWORD wStyle, LPTSTR lpszText) {
411     SendMessage(hPropSheetDlg, PSM_SETTITLE, wStyle, cast(LPARAM) lpszText);
412 }
413 
414 VOID PropSheet_SetWizButtons(HWND hPropSheetDlg, DWORD dwFlags) {
415     PostMessage(hPropSheetDlg, PSM_SETWIZBUTTONS, 0, cast(LPARAM) dwFlags);
416 }
417 
418 BOOL PropSheet_PressButton(HWND hPropSheetDlg, int iButton) {
419     return cast(BOOL) SendMessage(hPropSheetDlg, PSM_PRESSBUTTON, iButton, 0);
420 }
421 
422 BOOL PropSheet_SetCurSelByID(HWND hPropSheetDlg, int id) {
423     return cast(BOOL) SendMessage(hPropSheetDlg, PSM_SETCURSELID, 0, id);
424 }
425 
426 VOID PropSheet_SetFinishText(HWND hPropSheetDlg, LPTSTR lpszText) {
427     SendMessage(hPropSheetDlg, PSM_SETFINISHTEXT, 0, cast(LPARAM) lpszText);
428 }
429 
430 HWND PropSheet_GetTabControl(HWND hPropSheetDlg) {
431     return cast(HWND) SendMessage(hPropSheetDlg, PSM_GETTABCONTROL, 0, 0);
432 }
433 
434 BOOL PropSheet_IsDialogMessage(HWND hDlg, LPMSG pMsg) {
435     return cast(BOOL) SendMessage(hDlg, PSM_ISDIALOGMESSAGE,
436       0, cast(LPARAM) pMsg);
437 }
438 
439 HWND PropSheet_GetCurrentPageHwnd(HWND hDlg) {
440     return cast(HWND) SendMessage(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0);
441 }
442 
443 BOOL PropSheet_InsertPage(HWND hPropSheetDlg, WPARAM wInsertAfter,
444       HPROPSHEETPAGE hpage) {
445     return cast(BOOL) SendMessage(hPropSheetDlg, PSM_INSERTPAGE,
446       wInsertAfter, cast(LPARAM) hpage);
447 }