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 core.sys.windows.prsht;
version(Windows)11 version (Windows):
12 @system:
13
14 version (ANSI) {} else version = Unicode;
15 pragma(lib, "comctl32");
16
17 import core.sys.windows.w32api, core.sys.windows.windef, core.sys.windows.winuser;
18
19 enum MAXPROPPAGES = 100;
20
21 enum {
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
34 static if (_WIN32_IE >= 0x400) {
35 enum {
36 PSP_HIDEHEADER = 0x00000800,
37 PSP_USEHEADERTITLE = 0x00001000,
38 PSP_USEHEADERSUBTITLE = 0x00002000
39 }
40 }
41
42 enum {
43 PSPCB_RELEASE = 1,
44 PSPCB_CREATE
45 }
46
47 enum {
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
64 static 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
85 static if (_WIN32_IE >= 0x500) {
86 enum {
87 PSH_WIZARD_LITE = 0x00400000,
88 PSH_NOCONTEXTHELP = 0x02000000
89 }
90 }
91
92 enum {
93 PSCB_INITIALIZED = 1,
94 PSCB_PRECREATE
95 }
96
97 enum {
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 }
110 static if (_WIN32_IE >= 0x400) {
111 enum {
112 PSN_GETOBJECT = (-210)
113 }
114 }
115 static if (_WIN32_IE >= 0x500) {
116 enum {
117 PSN_TRANSLATEACCELERATOR = (-212),
118 PSN_QUERYINITIALFOCUS = (-213)
119 }
120 }
121
122 enum {
123 PSNRET_NOERROR,
124 PSNRET_INVALID,
125 PSNRET_INVALID_NOCHANGEPAGE,
126 PSNRET_MESSAGEHANDLED
127 }
128
129 enum {
130 ID_PSRESTARTWINDOWS = 0x2,
131 ID_PSREBOOTSYSTEM = ID_PSRESTARTWINDOWS | 0x1
132 }
133
134 enum {
135 WIZ_CXDLG = 276,
136 WIZ_CYDLG = 140,
137 WIZ_CXBMP = 80,
138 WIZ_BODYX = 92,
139 WIZ_BODYCX = 184
140 }
141
142 enum {
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
151 enum {
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
162 enum {
163 PSWIZB_BACK = 1,
164 PSWIZB_NEXT = 2,
165 PSWIZB_FINISH = 4,
166 PSWIZB_DISABLEDFINISH = 8
167 }
168
169 enum {
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
193 extern (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
199 align(4):
200
201 struct 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 }
223 alias PROPSHEETPAGEA* LPPROPSHEETPAGEA;
224 alias const(PROPSHEETPAGEA)* LPCPROPSHEETPAGEA;
225
226 struct 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 }
248 alias PROPSHEETPAGEW* LPPROPSHEETPAGEW;
249 alias const(PROPSHEETPAGEW)* LPCPROPSHEETPAGEW;
250
251 mixin DECLARE_HANDLE!("HPROPSHEETPAGE");
252
253 struct 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 }
285 alias PROPSHEETHEADERA* LPPROPSHEETHEADERA;
286 alias const(PROPSHEETHEADERA)* LPCPROPSHEETHEADERA;
287
288 struct 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 }
320 alias PROPSHEETHEADERW* LPPROPSHEETHEADERW;
321 alias const(PROPSHEETHEADERW)* LPCPROPSHEETHEADERW;
322
323 extern (Windows) {
324 alias BOOL function(HPROPSHEETPAGE, LPARAM) LPFNADDPROPSHEETPAGE;
325 alias BOOL function(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM)
326 LPFNADDPROPSHEETPAGES;
327 }
328
329 struct PSHNOTIFY {
330 NMHDR hdr;
331 LPARAM lParam;
332 }
333 alias PSHNOTIFY* LPPSHNOTIFY;
334
335 extern (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
343 version (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
369 BOOL 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
375 VOID PropSheet_RemovePage(HWND hPropSheetDlg, int index, HPROPSHEETPAGE hpage) {
376 SendMessage(hPropSheetDlg, PSM_REMOVEPAGE, index, cast(LPARAM) hpage);
377 }
378
379 BOOL PropSheet_AddPage(HWND hPropSheetDlg, HPROPSHEETPAGE hpage) {
380 return cast(BOOL) SendMessage(hPropSheetDlg, PSM_ADDPAGE,
381 0, cast(LPARAM) hpage);
382 }
383
384 VOID PropSheet_Changed(HWND hPropSheetDlg, HWND hwndPage) {
385 SendMessage(hPropSheetDlg, PSM_CHANGED, cast(WPARAM) hwndPage, 0);
386 }
387
388 VOID PropSheet_RestartWindows(HWND hPropSheetDlg) {
389 SendMessage(hPropSheetDlg, PSM_RESTARTWINDOWS, 0, 0);
390 }
391
392 VOID PropSheet_RebootSystem(HWND hPropSheetDlg) {
393 SendMessage(hPropSheetDlg, PSM_REBOOTSYSTEM, 0, 0);
394 }
395
396 VOID PropSheet_CancelToClose(HWND hPropSheetDlg) {
397 SendMessage(hPropSheetDlg, PSM_CANCELTOCLOSE, 0, 0);
398 }
399
400 int PropSheet_QuerySiblings(HWND hPropSheetDlg, WPARAM param1, LPARAM param2) {
401 return cast(int) SendMessage(hPropSheetDlg, PSM_QUERYSIBLINGS, param1, param2);
402 }
403
404 VOID PropSheet_UnChanged(HWND hPropSheetDlg, HWND hwndPage) {
405 SendMessage(hPropSheetDlg, PSM_UNCHANGED, cast(WPARAM) hwndPage, 0);
406 }
407
408 BOOL PropSheet_Apply(HWND hPropSheetDlg) {
409 return cast(BOOL) SendMessage(hPropSheetDlg, PSM_APPLY, 0, 0);
410 }
411
412 VOID PropSheet_SetTitle(HWND hPropSheetDlg, DWORD wStyle, LPTSTR lpszText) {
413 SendMessage(hPropSheetDlg, PSM_SETTITLE, wStyle, cast(LPARAM) lpszText);
414 }
415
416 VOID PropSheet_SetWizButtons(HWND hPropSheetDlg, DWORD dwFlags) {
417 PostMessage(hPropSheetDlg, PSM_SETWIZBUTTONS, 0, cast(LPARAM) dwFlags);
418 }
419
420 BOOL PropSheet_PressButton(HWND hPropSheetDlg, int iButton) {
421 return cast(BOOL) SendMessage(hPropSheetDlg, PSM_PRESSBUTTON, iButton, 0);
422 }
423
424 BOOL PropSheet_SetCurSelByID(HWND hPropSheetDlg, int id) {
425 return cast(BOOL) SendMessage(hPropSheetDlg, PSM_SETCURSELID, 0, id);
426 }
427
428 VOID PropSheet_SetFinishText(HWND hPropSheetDlg, LPTSTR lpszText) {
429 SendMessage(hPropSheetDlg, PSM_SETFINISHTEXT, 0, cast(LPARAM) lpszText);
430 }
431
432 HWND PropSheet_GetTabControl(HWND hPropSheetDlg) {
433 return cast(HWND) SendMessage(hPropSheetDlg, PSM_GETTABCONTROL, 0, 0);
434 }
435
436 BOOL PropSheet_IsDialogMessage(HWND hDlg, LPMSG pMsg) {
437 return cast(BOOL) SendMessage(hDlg, PSM_ISDIALOGMESSAGE,
438 0, cast(LPARAM) pMsg);
439 }
440
441 HWND PropSheet_GetCurrentPageHwnd(HWND hDlg) {
442 return cast(HWND) SendMessage(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0);
443 }
444
445 BOOL PropSheet_InsertPage(HWND hPropSheetDlg, WPARAM wInsertAfter,
446 HPROPSHEETPAGE hpage) {
447 return cast(BOOL) SendMessage(hPropSheetDlg, PSM_INSERTPAGE,
448 wInsertAfter, cast(LPARAM) hpage);
449 }
450