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