1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Interface for the Windows Property Sheet Pages
7 use ctypes::{c_int, c_short};
8 use shared::basetsd::INT_PTR;
9 use shared::minwindef::{BOOL, DWORD, HINSTANCE, LPARAM, LPVOID, LRESULT, UINT, WPARAM};
10 use shared::windef::{HBITMAP, HICON, HPALETTE, HWND};
11 use um::winnt::{HANDLE, LPCSTR, LPCWSTR};
12 use um::winuser::{DLGPROC, LPCDLGTEMPLATEA, NMHDR, WM_USER};
13 pub enum PSP {}
14 pub type HPROPSHEETPAGE = *mut PSP;
15 FN!{stdcall LPFNPSPCALLBACKA(
16     hwnd: HWND,
17     uMsg: UINT,
18     ppsp: *mut PROPSHEETPAGEA,
19 ) -> UINT}
20 FN!{stdcall LPFNPSPCALLBACKW(
21     hwnd: HWND,
22     uMsg: UINT,
23     ppsp: *mut PROPSHEETPAGEW,
24 ) -> UINT}
25 pub const PSP_DEFAULT: DWORD = 0x00000000;
26 pub const PSP_DLGINDIRECT: DWORD = 0x00000001;
27 pub const PSP_USEHICON: DWORD = 0x00000002;
28 pub const PSP_USEICONID: DWORD = 0x00000004;
29 pub const PSP_USETITLE: DWORD = 0x00000008;
30 pub const PSP_RTLREADING: DWORD = 0x00000010;
31 pub const PSP_HASHELP: DWORD = 0x00000020;
32 pub const PSP_USEREFPARENT: DWORD = 0x00000040;
33 pub const PSP_USECALLBACK: DWORD = 0x00000080;
34 pub const PSP_PREMATURE: DWORD = 0x00000400;
35 pub const PSP_HIDEHEADER: DWORD = 0x00000800;
36 pub const PSP_USEHEADERTITLE: DWORD = 0x00001000;
37 pub const PSP_USEHEADERSUBTITLE: DWORD = 0x00002000;
38 pub const PSP_USEFUSIONCONTEXT: DWORD = 0x00004000;
39 pub const PSPCB_ADDREF: UINT = 0;
40 pub const PSPCB_RELEASE: UINT = 1;
41 pub const PSPCB_CREATE: UINT = 2;
42 pub type PROPSHEETPAGE_RESOURCE = LPCDLGTEMPLATEA;
43 UNION!{union PROPSHEETPAGEA_V1_u1 {
44     [usize; 1],
45     pszTemplate pszTemplate_mut: LPCSTR,
46     pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
47 }}
48 UNION!{union PROPSHEETPAGEA_V1_u2 {
49     [usize; 1],
50     hIcon hIcon_mut: HICON,
51     pszIcon pszIcon_mut: LPCSTR,
52 }}
53 UNION!{union PROPSHEETPAGEA_V4_u3 {
54     [usize; 1],
55     hbmHeader hbmHeader_mut: HBITMAP,
56     pszbmHeader pszbmHeader_mut: LPCSTR,
57 }}
58 STRUCT!{struct PROPSHEETPAGEA_V4 {
59     dwSize: DWORD,
60     dwFlags: DWORD,
61     hInstance: HINSTANCE,
62     u1: PROPSHEETPAGEA_V1_u1,
63     u2: PROPSHEETPAGEA_V1_u2,
64     pszTitle: LPCSTR,
65     pfnDlgProc: DLGPROC,
66     lParam: LPARAM,
67     pfnCallback: LPFNPSPCALLBACKA,
68     pcRefParent: *mut UINT,
69     pszHeaderTitle: LPCSTR,
70     pszHeaderSubTitle: LPCSTR,
71     hActCtx: HANDLE,
72     u3: PROPSHEETPAGEA_V4_u3,
73 }}
74 pub type LPPROPSHEETPAGEA_V4 = *mut PROPSHEETPAGEA_V4;
75 pub type LPCPROPSHEETPAGEA_V4 = *const PROPSHEETPAGEA_V4;
76 UNION!{union PROPSHEETPAGEW_V1_u1 {
77     [usize; 1],
78     pszTemplate pszTemplate_mut: LPCWSTR,
79     pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
80 }}
81 UNION!{union PROPSHEETPAGEW_V1_u2 {
82     [usize; 1],
83     hIcon hIcon_mut: HICON,
84     pszIcon pszIcon_mut: LPCWSTR,
85 }}
86 UNION!{union PROPSHEETPAGEW_V4_u3 {
87     [usize; 1],
88     hbmHeader hbmHeader_mut: HBITMAP,
89     pszbmHeader pszbmHeader_mut: LPCWSTR,
90 }}
91 STRUCT!{struct PROPSHEETPAGEW_V4 {
92     dwSize: DWORD,
93     dwFlags: DWORD,
94     hInstance: HINSTANCE,
95     u1: PROPSHEETPAGEW_V1_u1,
96     u2: PROPSHEETPAGEW_V1_u2,
97     pszTitle: LPCWSTR,
98     pfnDlgProc: DLGPROC,
99     lParam: LPARAM,
100     pfnCallback: LPFNPSPCALLBACKW,
101     pcRefParent: *mut UINT,
102     pszHeaderTitle: LPCWSTR,
103     pszHeaderSubTitle: LPCWSTR,
104     hActCtx: HANDLE,
105     u3: PROPSHEETPAGEW_V4_u3,
106 }}
107 pub type LPPROPSHEETPAGEW_V4 = *mut PROPSHEETPAGEW_V4;
108 pub type LPCPROPSHEETPAGEW_V4 = *const PROPSHEETPAGEW_V4;
109 pub type PROPSHEETPAGEA_LATEST = PROPSHEETPAGEA_V4;
110 pub type PROPSHEETPAGEW_LATEST = PROPSHEETPAGEW_V4;
111 pub type LPPROPSHEETPAGEA_LATEST = LPPROPSHEETPAGEA_V4;
112 pub type LPPROPSHEETPAGEW_LATEST = LPPROPSHEETPAGEW_V4;
113 pub type LPCPROPSHEETPAGEA_LATEST = LPCPROPSHEETPAGEA_V4;
114 pub type LPCPROPSHEETPAGEW_LATEST = LPCPROPSHEETPAGEW_V4;
115 pub type PROPSHEETPAGEA = PROPSHEETPAGEA_V4;
116 pub type PROPSHEETPAGEW = PROPSHEETPAGEW_V4;
117 pub type LPPROPSHEETPAGEA = LPPROPSHEETPAGEA_V4;
118 pub type LPPROPSHEETPAGEW = LPPROPSHEETPAGEW_V4;
119 pub type LPCPROPSHEETPAGEA = LPCPROPSHEETPAGEA_V4;
120 pub type LPCPROPSHEETPAGEW = LPCPROPSHEETPAGEW_V4;
121 pub const PSH_DEFAULT: DWORD = 0x00000000;
122 pub const PSH_PROPTITLE: DWORD = 0x00000001;
123 pub const PSH_USEHICON: DWORD = 0x00000002;
124 pub const PSH_USEICONID: DWORD = 0x00000004;
125 pub const PSH_PROPSHEETPAGE: DWORD = 0x00000008;
126 pub const PSH_WIZARDHASFINISH: DWORD = 0x00000010;
127 pub const PSH_WIZARD: DWORD = 0x00000020;
128 pub const PSH_USEPSTARTPAGE: DWORD = 0x00000040;
129 pub const PSH_NOAPPLYNOW: DWORD = 0x00000080;
130 pub const PSH_USECALLBACK: DWORD = 0x00000100;
131 pub const PSH_HASHELP: DWORD = 0x00000200;
132 pub const PSH_MODELESS: DWORD = 0x00000400;
133 pub const PSH_RTLREADING: DWORD = 0x00000800;
134 pub const PSH_WIZARDCONTEXTHELP: DWORD = 0x00001000;
135 pub const PSH_WIZARD97: DWORD = 0x01000000;
136 pub const PSH_WATERMARK: DWORD = 0x00008000;
137 pub const PSH_USEHBMWATERMARK: DWORD = 0x00010000;
138 pub const PSH_USEHPLWATERMARK: DWORD = 0x00020000;
139 pub const PSH_STRETCHWATERMARK: DWORD = 0x00040000;
140 pub const PSH_HEADER: DWORD = 0x00080000;
141 pub const PSH_USEHBMHEADER: DWORD = 0x00100000;
142 pub const PSH_USEPAGELANG: DWORD = 0x00200000;
143 pub const PSH_WIZARD_LITE: DWORD = 0x00400000;
144 pub const PSH_NOCONTEXTHELP: DWORD = 0x02000000;
145 pub const PSH_AEROWIZARD: DWORD = 0x00004000;
146 pub const PSH_RESIZABLE: DWORD = 0x04000000;
147 pub const PSH_HEADERBITMAP: DWORD = 0x08000000;
148 pub const PSH_NOMARGIN: DWORD = 0x10000000;
149 FN!{stdcall PFNPROPSHEETCALLBACK(
150     HWND,
151     UINT,
152     LPARAM,
153 ) -> c_int}
154 UNION!{union PROPSHEETHEADERA_V1_u1 {
155     [usize; 1],
156     hIcon hIcon_mut: HICON,
157     pszIcon pszIcon_mut: LPCSTR,
158 }}
159 UNION!{union PROPSHEETHEADERA_V1_u2 {
160     [usize; 1],
161     nStartPage nStartPage_mut: UINT,
162     pStartPage pStartPage_mut: LPCSTR,
163 }}
164 UNION!{union PROPSHEETHEADERA_V1_u3 {
165     [usize; 1],
166     ppsp ppsp_mut: LPCPROPSHEETPAGEA,
167     phpage phpage_mut: *mut HPROPSHEETPAGE,
168 }}
169 UNION!{union PROPSHEETHEADERA_V2_u4 {
170     [usize; 1],
171     hbmWatermark hbmWatermark_mut: HBITMAP,
172     pszbmWatermark pszbmWatermark_mut: LPCSTR,
173 }}
174 UNION!{union PROPSHEETHEADERA_V2_u5 {
175     [usize; 1],
176     hbmHeader hbmHeader_mut: HBITMAP,
177     pszbmHeader pszbmHeader_mut: LPCSTR,
178 }}
179 STRUCT!{struct PROPSHEETHEADERA_V2 {
180     dwSize: DWORD,
181     dwFlags: DWORD,
182     hwndParent: HWND,
183     hInstance: HINSTANCE,
184     u1: PROPSHEETHEADERA_V1_u1,
185     pszCaption: LPCSTR,
186     nPages: UINT,
187     u2: PROPSHEETHEADERA_V1_u2,
188     u3: PROPSHEETHEADERA_V1_u3,
189     pfnCallback: PFNPROPSHEETCALLBACK,
190     u4: PROPSHEETHEADERA_V2_u4,
191     hplWatermark: HPALETTE,
192     u5: PROPSHEETHEADERA_V2_u5,
193 }}
194 pub type LPPROPSHEETHEADERA_V2 = *mut PROPSHEETHEADERA_V2;
195 pub type LPCPROPSHEETHEADERA_V2 = *const PROPSHEETHEADERA_V2;
196 UNION!{union PROPSHEETHEADERW_V1_u1 {
197     [usize; 1],
198     hIcon hIcon_mut: HICON,
199     pszIcon pszIcon_mut: LPCWSTR,
200 }}
201 UNION!{union PROPSHEETHEADERW_V1_u2 {
202     [usize; 1],
203     nStartPage nStartPage_mut: UINT,
204     pStartPage pStartPage_mut: LPCWSTR,
205 }}
206 UNION!{union PROPSHEETHEADERW_V1_u3 {
207     [usize; 1],
208     ppsp ppsp_mut: LPCPROPSHEETPAGEW,
209     phpage phpage_mut: *mut HPROPSHEETPAGE,
210 }}
211 UNION!{union PROPSHEETHEADERW_V2_u4 {
212     [usize; 1],
213     hbmWatermark hbmWatermark_mut: HBITMAP,
214     pszbmWatermark pszbmWatermark_mut: LPCWSTR,
215 }}
216 UNION!{union PROPSHEETHEADERW_V2_u5 {
217     [usize; 1],
218     hbmHeader hbmHeader_mut: HBITMAP,
219     pszbmHeader pszbmHeader_mut: LPCWSTR,
220 }}
221 STRUCT!{struct PROPSHEETHEADERW_V2 {
222     dwSize: DWORD,
223     dwFlags: DWORD,
224     hwndParent: HWND,
225     hInstance: HINSTANCE,
226     u1: PROPSHEETHEADERW_V1_u1,
227     pszCaption: LPCWSTR,
228     nPages: UINT,
229     u2: PROPSHEETHEADERW_V1_u2,
230     u3: PROPSHEETHEADERW_V1_u3,
231     pfnCallback: PFNPROPSHEETCALLBACK,
232     u4: PROPSHEETHEADERW_V2_u4,
233     hplWatermark: HPALETTE,
234     u5: PROPSHEETHEADERW_V2_u5,
235 }}
236 pub type LPPROPSHEETHEADERW_V2 = *mut PROPSHEETHEADERW_V2;
237 pub type LPCPROPSHEETHEADERW_V2 = *const PROPSHEETHEADERW_V2;
238 pub type PROPSHEETHEADERA = PROPSHEETHEADERA_V2;
239 pub type PROPSHEETHEADERW = PROPSHEETHEADERW_V2;
240 pub type LPPROPSHEETHEADERA = LPPROPSHEETHEADERA_V2;
241 pub type LPPROPSHEETHEADERW = LPPROPSHEETHEADERW_V2;
242 pub type LPCPROPSHEETHEADERA = LPCPROPSHEETHEADERA_V2;
243 pub type LPCPROPSHEETHEADERW = LPCPROPSHEETHEADERW_V2;
244 pub const PSCB_INITIALIZED: UINT = 1;
245 pub const PSCB_PRECREATE: UINT = 2;
246 pub const PSCB_BUTTONPRESSED: UINT = 3;
247 extern "system" {
CreatePropertySheetPageA( constPropSheetPagePointer: LPCPROPSHEETPAGEA, ) -> HPROPSHEETPAGE248     pub fn CreatePropertySheetPageA(
249         constPropSheetPagePointer: LPCPROPSHEETPAGEA,
250     ) -> HPROPSHEETPAGE;
CreatePropertySheetPageW( constPropSheetPagePointer: LPCPROPSHEETPAGEW, ) -> HPROPSHEETPAGE251     pub fn CreatePropertySheetPageW(
252         constPropSheetPagePointer: LPCPROPSHEETPAGEW,
253     ) -> HPROPSHEETPAGE;
DestroyPropertySheetPage( hPSPage: HPROPSHEETPAGE, ) -> BOOL254     pub fn DestroyPropertySheetPage(
255         hPSPage: HPROPSHEETPAGE,
256     ) -> BOOL;
PropertySheetA( lppsph: LPCPROPSHEETHEADERA, ) -> INT_PTR257     pub fn PropertySheetA(
258         lppsph: LPCPROPSHEETHEADERA,
259     ) -> INT_PTR;
PropertySheetW( lppsph: LPCPROPSHEETHEADERW, ) -> INT_PTR260     pub fn PropertySheetW(
261         lppsph: LPCPROPSHEETHEADERW,
262     ) -> INT_PTR;
263 }
264 FN!{stdcall LPFNADDPROPSHEETPAGE(
265     HPROPSHEETPAGE,
266     LPARAM,
267 ) -> BOOL}
268 FN!{stdcall LPFNADDPROPSHEETPAGES(
269     LPVOID,
270     LPFNADDPROPSHEETPAGE,
271     LPARAM,
272 ) -> BOOL}
273 STRUCT!{struct PSHNOTIFY {
274     hdr: NMHDR,
275     lParam: LPARAM,
276 }}
277 pub type LPPSHNOTIFY = *mut PSHNOTIFY;
278 pub const PSN_FIRST: UINT = -200i32 as u32;
279 pub const PSN_LAST: UINT = -299i32 as u32;
280 pub const PSN_SETACTIVE: UINT = PSN_FIRST - 0;
281 pub const PSN_KILLACTIVE: UINT = PSN_FIRST - 1;
282 pub const PSN_APPLY: UINT = PSN_FIRST - 2;
283 pub const PSN_RESET: UINT = PSN_FIRST - 3;
284 pub const PSN_HELP: UINT = PSN_FIRST - 5;
285 pub const PSN_WIZBACK: UINT = PSN_FIRST - 6;
286 pub const PSN_WIZNEXT: UINT = PSN_FIRST - 7;
287 pub const PSN_WIZFINISH: UINT = PSN_FIRST - 8;
288 pub const PSN_QUERYCANCEL: UINT = PSN_FIRST - 9;
289 pub const PSN_GETOBJECT: UINT = PSN_FIRST - 10;
290 pub const PSN_TRANSLATEACCELERATOR: UINT = PSN_FIRST - 12;
291 pub const PSN_QUERYINITIALFOCUS: UINT = PSN_FIRST - 13;
292 pub const PSNRET_NOERROR: LRESULT = 0;
293 pub const PSNRET_INVALID: LRESULT = 1;
294 pub const PSNRET_INVALID_NOCHANGEPAGE: LRESULT = 2;
295 pub const PSNRET_MESSAGEHANDLED: LRESULT = 3;
296 pub const PSM_SETCURSEL: UINT = WM_USER + 101;
297 pub const PSM_REMOVEPAGE: UINT = WM_USER + 102;
298 pub const PSM_ADDPAGE: UINT = WM_USER + 103;
299 pub const PSM_CHANGED: UINT = WM_USER + 104;
300 pub const PSM_RESTARTWINDOWS: UINT = WM_USER + 105;
301 pub const PSM_REBOOTSYSTEM: UINT = WM_USER + 106;
302 pub const PSM_CANCELTOCLOSE: UINT = WM_USER + 107;
303 pub const PSM_QUERYSIBLINGS: UINT = WM_USER + 108;
304 pub const PSM_UNCHANGED: UINT = WM_USER + 109;
305 pub const PSM_APPLY: UINT = WM_USER + 110;
306 pub const PSM_SETTITLEA: UINT = WM_USER + 111;
307 pub const PSM_SETTITLEW: UINT = WM_USER + 120;
308 pub const PSM_SETWIZBUTTONS: UINT = WM_USER + 112;
309 pub const PSWIZB_BACK: DWORD = 0x00000001;
310 pub const PSWIZB_NEXT: DWORD = 0x00000002;
311 pub const PSWIZB_FINISH: DWORD = 0x00000004;
312 pub const PSWIZB_DISABLEDFINISH: DWORD = 0x00000008;
313 pub const PSWIZBF_ELEVATIONREQUIRED: WPARAM = 0x00000001;
314 pub const PSWIZB_CANCEL: DWORD = 0x00000010;
315 pub const PSM_PRESSBUTTON: UINT = WM_USER + 113;
316 pub const PSBTN_BACK: c_int = 0;
317 pub const PSBTN_NEXT: c_int = 1;
318 pub const PSBTN_FINISH: c_int = 2;
319 pub const PSBTN_OK: c_int = 3;
320 pub const PSBTN_APPLYNOW: c_int = 4;
321 pub const PSBTN_CANCEL: c_int = 5;
322 pub const PSBTN_HELP: c_int = 6;
323 pub const PSBTN_MAX: c_int = 6;
324 pub const PSM_SETCURSELID: UINT = WM_USER + 114;
325 pub const PSM_SETFINISHTEXTA: UINT = WM_USER + 115;
326 pub const PSM_SETFINISHTEXTW: UINT = WM_USER + 121;
327 pub const PSM_GETTABCONTROL: UINT = WM_USER + 116;
328 pub const PSM_ISDIALOGMESSAGE: UINT = WM_USER + 117;
329 pub const PSM_GETCURRENTPAGEHWND: UINT = WM_USER + 118;
330 pub const PSM_INSERTPAGE: UINT = WM_USER + 119;
331 pub const PSM_SETHEADERTITLEA: UINT = WM_USER + 125;
332 pub const PSM_SETHEADERTITLEW: UINT = WM_USER + 126;
333 pub const PSWIZF_SETCOLOR: UINT = -1i32 as u32;
334 pub const PSM_SETHEADERSUBTITLEA: UINT = WM_USER + 127;
335 pub const PSM_SETHEADERSUBTITLEW: UINT = WM_USER + 128;
336 pub const PSM_HWNDTOINDEX: UINT = WM_USER + 129;
337 pub const PSM_INDEXTOHWND: UINT = WM_USER + 130;
338 pub const PSM_PAGETOINDEX: UINT = WM_USER + 131;
339 pub const PSM_INDEXTOPAGE: UINT = WM_USER + 132;
340 pub const PSM_IDTOINDEX: UINT = WM_USER + 133;
341 pub const PSM_INDEXTOID: UINT = WM_USER + 134;
342 pub const PSM_GETRESULT: UINT = WM_USER + 135;
343 pub const PSM_RECALCPAGESIZES: UINT = WM_USER + 136;
344 pub const PSM_SETNEXTTEXTW: UINT = WM_USER + 137;
345 pub const PSM_SHOWWIZBUTTONS: UINT = WM_USER + 138;
346 pub const PSM_ENABLEWIZBUTTONS: UINT = WM_USER + 139;
347 pub const PSM_SETBUTTONTEXTW: UINT = WM_USER + 140;
348 pub const PSM_SETBUTTONTEXT: UINT = PSM_SETBUTTONTEXTW;
349 pub const ID_PSRESTARTWINDOWS: INT_PTR = 0x2;
350 pub const ID_PSREBOOTSYSTEM: INT_PTR = ID_PSRESTARTWINDOWS | 0x1;
351 pub const WIZ_CXDLG: DWORD = 276;
352 pub const WIZ_CYDLG: DWORD = 140;
353 pub const WIZ_CXBMP: DWORD = 80;
354 pub const WIZ_BODYX: DWORD = 92;
355 pub const WIZ_BODYCX: DWORD = 184;
356 pub const PROP_SM_CXDLG: c_short = 212;
357 pub const PROP_SM_CYDLG: c_short = 188;
358 pub const PROP_MED_CXDLG: c_short = 227;
359 pub const PROP_MED_CYDLG: c_short = 215;
360 pub const PROP_LG_CXDLG: c_short = 252;
361 pub const PROP_LG_CYDLG: c_short = 218;
362