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