// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! Interface for the Windows Property Sheet Pages
use ctypes::{c_int, c_short};
use shared::basetsd::INT_PTR;
use shared::minwindef::{BOOL, DWORD, HINSTANCE, LPARAM, LPVOID, LRESULT, UINT, WPARAM};
use shared::windef::{HBITMAP, HICON, HPALETTE, HWND};
use um::winnt::{HANDLE, LPCSTR, LPCWSTR};
use um::winuser::{DLGPROC, LPCDLGTEMPLATEA, NMHDR, WM_USER};
pub enum PSP {}
pub type HPROPSHEETPAGE = *
mut PSP;
FN!{stdcall LPFNPSPCALLBACKA(
hwnd: HWND,
uMsg: UINT,
ppsp: *
mut PROPSHEETPAGEA,
) -> UINT}
FN!{stdcall LPFNPSPCALLBACKW(
hwnd: HWND,
uMsg: UINT,
ppsp: *
mut PROPSHEETPAGEW,
) -> UINT}
pub const PSP_DEFAULT: DWORD =
0x00000000;
pub const PSP_DLGINDIRECT: DWORD =
0x00000001;
pub const PSP_USEHICON: DWORD =
0x00000002;
pub const PSP_USEICONID: DWORD =
0x00000004;
pub const PSP_USETITLE: DWORD =
0x00000008;
pub const PSP_RTLREADING: DWORD =
0x00000010;
pub const PSP_HASHELP: DWORD =
0x00000020;
pub const PSP_USEREFPARENT: DWORD =
0x00000040;
pub const PSP_USECALLBACK: DWORD =
0x00000080;
pub const PSP_PREMATURE: DWORD =
0x00000400;
pub const PSP_HIDEHEADER: DWORD =
0x00000800;
pub const PSP_USEHEADERTITLE: DWORD =
0x00001000;
pub const PSP_USEHEADERSUBTITLE: DWORD =
0x00002000;
pub const PSP_USEFUSIONCONTEXT: DWORD =
0x00004000;
pub const PSPCB_ADDREF: UINT =
0;
pub const PSPCB_RELEASE: UINT =
1;
pub const PSPCB_CREATE: UINT =
2;
pub type PROPSHEETPAGE_RESOURCE = LPCDLGTEMPLATEA;
UNION!{union PROPSHEETPAGEA_V1_u1 {
[usize;
1],
pszTemplate pszTemplate_mut: LPCSTR,
pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
}}
UNION!{union PROPSHEETPAGEA_V1_u2 {
[usize;
1],
hIcon hIcon_mut: HICON,
pszIcon pszIcon_mut: LPCSTR,
}}
UNION!{union PROPSHEETPAGEA_V4_u3 {
[usize;
1],
hbmHeader hbmHeader_mut: HBITMAP,
pszbmHeader pszbmHeader_mut: LPCSTR,
}}
STRUCT!{
struct PROPSHEETPAGEA_V4 {
dwSize: DWORD,
dwFlags: DWORD,
hInstance: HINSTANCE,
u1: PROPSHEETPAGEA_V1_u1,
u2: PROPSHEETPAGEA_V1_u2,
pszTitle: LPCSTR,
pfnDlgProc: DLGPROC,
lParam: LPARAM,
pfnCallback: LPFNPSPCALLBACKA,
pcRefParent: *
mut UINT,
pszHeaderTitle: LPCSTR,
pszHeaderSubTitle: LPCSTR,
hActCtx: HANDLE,
u3: PROPSHEETPAGEA_V4_u3,
}}
pub type LPPROPSHEETPAGEA_V4 = *
mut PROPSHEETPAGEA_V4;
pub type LPCPROPSHEETPAGEA_V4 = *
const PROPSHEETPAGEA_V4;
UNION!{union PROPSHEETPAGEW_V1_u1 {
[usize;
1],
pszTemplate pszTemplate_mut: LPCWSTR,
pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
}}
UNION!{union PROPSHEETPAGEW_V1_u2 {
[usize;
1],
hIcon hIcon_mut: HICON,
pszIcon pszIcon_mut: LPCWSTR,
}}
UNION!{union PROPSHEETPAGEW_V4_u3 {
[usize;
1],
hbmHeader hbmHeader_mut: HBITMAP,
pszbmHeader pszbmHeader_mut: LPCWSTR,
}}
STRUCT!{
struct PROPSHEETPAGEW_V4 {
dwSize: DWORD,
dwFlags: DWORD,
hInstance: HINSTANCE,
u1: PROPSHEETPAGEW_V1_u1,
u2: PROPSHEETPAGEW_V1_u2,
pszTitle: LPCWSTR,
pfnDlgProc: DLGPROC,
lParam: LPARAM,
pfnCallback: LPFNPSPCALLBACKW,
pcRefParent: *
mut UINT,
pszHeaderTitle: LPCWSTR,
pszHeaderSubTitle: LPCWSTR,
hActCtx: HANDLE,
u3: PROPSHEETPAGEW_V4_u3,
}}
pub type LPPROPSHEETPAGEW_V4 = *
mut PROPSHEETPAGEW_V4;
pub type LPCPROPSHEETPAGEW_V4 = *
const PROPSHEETPAGEW_V4;
pub type PROPSHEETPAGEA_LATEST = PROPSHEETPAGEA_V4;
pub type PROPSHEETPAGEW_LATEST = PROPSHEETPAGEW_V4;
pub type LPPROPSHEETPAGEA_LATEST = LPPROPSHEETPAGEA_V4;
pub type LPPROPSHEETPAGEW_LATEST = LPPROPSHEETPAGEW_V4;
pub type LPCPROPSHEETPAGEA_LATEST = LPCPROPSHEETPAGEA_V4;
pub type LPCPROPSHEETPAGEW_LATEST = LPCPROPSHEETPAGEW_V4;
pub type PROPSHEETPAGEA = PROPSHEETPAGEA_V4;
pub type PROPSHEETPAGEW = PROPSHEETPAGEW_V4;
pub type LPPROPSHEETPAGEA = LPPROPSHEETPAGEA_V4;
pub type LPPROPSHEETPAGEW = LPPROPSHEETPAGEW_V4;
pub type LPCPROPSHEETPAGEA = LPCPROPSHEETPAGEA_V4;
pub type LPCPROPSHEETPAGEW = LPCPROPSHEETPAGEW_V4;
pub const PSH_DEFAULT: DWORD =
0x00000000;
pub const PSH_PROPTITLE: DWORD =
0x00000001;
pub const PSH_USEHICON: DWORD =
0x00000002;
pub const PSH_USEICONID: DWORD =
0x00000004;
pub const PSH_PROPSHEETPAGE: DWORD =
0x00000008;
pub const PSH_WIZARDHASFINISH: DWORD =
0x00000010;
pub const PSH_WIZARD: DWORD =
0x00000020;
pub const PSH_USEPSTARTPAGE: DWORD =
0x00000040;
pub const PSH_NOAPPLYNOW: DWORD =
0x00000080;
pub const PSH_USECALLBACK: DWORD =
0x00000100;
pub const PSH_HASHELP: DWORD =
0x00000200;
pub const PSH_MODELESS: DWORD =
0x00000400;
pub const PSH_RTLREADING: DWORD =
0x00000800;
pub const PSH_WIZARDCONTEXTHELP: DWORD =
0x00001000;
pub const PSH_WIZARD97: DWORD =
0x01000000;
pub const PSH_WATERMARK: DWORD =
0x00008000;
pub const PSH_USEHBMWATERMARK: DWORD =
0x00010000;
pub const PSH_USEHPLWATERMARK: DWORD =
0x00020000;
pub const PSH_STRETCHWATERMARK: DWORD =
0x00040000;
pub const PSH_HEADER: DWORD =
0x00080000;
pub const PSH_USEHBMHEADER: DWORD =
0x00100000;
pub const PSH_USEPAGELANG: DWORD =
0x00200000;
pub const PSH_WIZARD_LITE: DWORD =
0x00400000;
pub const PSH_NOCONTEXTHELP: DWORD =
0x02000000;
pub const PSH_AEROWIZARD: DWORD =
0x00004000;
pub const PSH_RESIZABLE: DWORD =
0x04000000;
pub const PSH_HEADERBITMAP: DWORD =
0x08000000;
pub const PSH_NOMARGIN: DWORD =
0x10000000;
FN!{stdcall PFNPROPSHEETCALLBACK(
HWND,
UINT,
LPARAM,
) -> c_int}
UNION!{union PROPSHEETHEADERA_V1_u1 {
[usize;
1],
hIcon hIcon_mut: HICON,
pszIcon pszIcon_mut: LPCSTR,
}}
UNION!{union PROPSHEETHEADERA_V1_u2 {
[usize;
1],
nStartPage nStartPage_mut: UINT,
pStartPage pStartPage_mut: LPCSTR,
}}
UNION!{union PROPSHEETHEADERA_V1_u3 {
[usize;
1],
ppsp ppsp_mut: LPCPROPSHEETPAGEA,
phpage phpage_mut: *
mut HPROPSHEETPAGE,
}}
UNION!{union PROPSHEETHEADERA_V2_u4 {
[usize;
1],
hbmWatermark hbmWatermark_mut: HBITMAP,
pszbmWatermark pszbmWatermark_mut: LPCSTR,
}}
UNION!{union PROPSHEETHEADERA_V2_u5 {
[usize;
1],
hbmHeader hbmHeader_mut: HBITMAP,
pszbmHeader pszbmHeader_mut: LPCSTR,
}}
STRUCT!{
struct PROPSHEETHEADERA_V2 {
dwSize: DWORD,
dwFlags: DWORD,
hwndParent: HWND,
hInstance: HINSTANCE,
u1: PROPSHEETHEADERA_V1_u1,
pszCaption: LPCSTR,
nPages: UINT,
u2: PROPSHEETHEADERA_V1_u2,
u3: PROPSHEETHEADERA_V1_u3,
pfnCallback: PFNPROPSHEETCALLBACK,
u4: PROPSHEETHEADERA_V2_u4,
hplWatermark: HPALETTE,
u5: PROPSHEETHEADERA_V2_u5,
}}
pub type LPPROPSHEETHEADERA_V2 = *
mut PROPSHEETHEADERA_V2;
pub type LPCPROPSHEETHEADERA_V2 = *
const PROPSHEETHEADERA_V2;
UNION!{union PROPSHEETHEADERW_V1_u1 {
[usize;
1],
hIcon hIcon_mut: HICON,
pszIcon pszIcon_mut: LPCWSTR,
}}
UNION!{union PROPSHEETHEADERW_V1_u2 {
[usize;
1],
nStartPage nStartPage_mut: UINT,
pStartPage pStartPage_mut: LPCWSTR,
}}
UNION!{union PROPSHEETHEADERW_V1_u3 {
[usize;
1],
ppsp ppsp_mut: LPCPROPSHEETPAGEW,
phpage phpage_mut: *
mut HPROPSHEETPAGE,
}}
UNION!{union PROPSHEETHEADERW_V2_u4 {
[usize;
1],
hbmWatermark hbmWatermark_mut: HBITMAP,
pszbmWatermark pszbmWatermark_mut: LPCWSTR,
}}
UNION!{union PROPSHEETHEADERW_V2_u5 {
[usize;
1],
hbmHeader hbmHeader_mut: HBITMAP,
pszbmHeader pszbmHeader_mut: LPCWSTR,
}}
STRUCT!{
struct PROPSHEETHEADERW_V2 {
dwSize: DWORD,
dwFlags: DWORD,
hwndParent: HWND,
hInstance: HINSTANCE,
u1: PROPSHEETHEADERW_V1_u1,
pszCaption: LPCWSTR,
nPages: UINT,
u2: PROPSHEETHEADERW_V1_u2,
u3: PROPSHEETHEADERW_V1_u3,
pfnCallback: PFNPROPSHEETCALLBACK,
u4: PROPSHEETHEADERW_V2_u4,
hplWatermark: HPALETTE,
u5: PROPSHEETHEADERW_V2_u5,
}}
pub type LPPROPSHEETHEADERW_V2 = *
mut PROPSHEETHEADERW_V2;
pub type LPCPROPSHEETHEADERW_V2 = *
const PROPSHEETHEADERW_V2;
pub type PROPSHEETHEADERA = PROPSHEETHEADERA_V2;
pub type PROPSHEETHEADERW = PROPSHEETHEADERW_V2;
pub type LPPROPSHEETHEADERA = LPPROPSHEETHEADERA_V2;
pub type LPPROPSHEETHEADERW = LPPROPSHEETHEADERW_V2;
pub type LPCPROPSHEETHEADERA = LPCPROPSHEETHEADERA_V2;
pub type LPCPROPSHEETHEADERW = LPCPROPSHEETHEADERW_V2;
pub const PSCB_INITIALIZED: UINT =
1;
pub const PSCB_PRECREATE: UINT =
2;
pub const PSCB_BUTTONPRESSED: UINT =
3;
extern "system" {
pub fn CreatePropertySheetPageA(
constPropSheetPagePointer: LPCPROPSHEETPAGEA,
) -> HPROPSHEETPAGE;
pub fn CreatePropertySheetPageW(
constPropSheetPagePointer: LPCPROPSHEETPAGEW,
) -> HPROPSHEETPAGE;
pub fn DestroyPropertySheetPage(
hPSPage: HPROPSHEETPAGE,
) -> BOOL;
pub fn PropertySheetA(
lppsph: LPCPROPSHEETHEADERA,
) -> INT_PTR;
pub fn PropertySheetW(
lppsph: LPCPROPSHEETHEADERW,
) -> INT_PTR;
}
FN!{stdcall LPFNADDPROPSHEETPAGE(
HPROPSHEETPAGE,
LPARAM,
) -> BOOL}
FN!{stdcall LPFNADDPROPSHEETPAGES(
LPVOID,
LPFNADDPROPSHEETPAGE,
LPARAM,
) -> BOOL}
STRUCT!{
struct PSHNOTIFY {
hdr: NMHDR,
lParam: LPARAM,
}}
pub type LPPSHNOTIFY = *
mut PSHNOTIFY;
pub const PSN_FIRST: UINT = -
200i32
as u32;
pub const PSN_LAST: UINT = -
299i32
as u32;
pub const PSN_SETACTIVE: UINT = PSN_FIRST -
0;
pub const PSN_KILLACTIVE: UINT = PSN_FIRST -
1;
pub const PSN_APPLY: UINT = PSN_FIRST -
2;
pub const PSN_RESET: UINT = PSN_FIRST -
3;
pub const PSN_HELP: UINT = PSN_FIRST -
5;
pub const PSN_WIZBACK: UINT = PSN_FIRST -
6;
pub const PSN_WIZNEXT: UINT = PSN_FIRST -
7;
pub const PSN_WIZFINISH: UINT = PSN_FIRST -
8;
pub const PSN_QUERYCANCEL: UINT = PSN_FIRST -
9;
pub const PSN_GETOBJECT: UINT = PSN_FIRST -
10;
pub const PSN_TRANSLATEACCELERATOR: UINT = PSN_FIRST -
12;
pub const PSN_QUERYINITIALFOCUS: UINT = PSN_FIRST -
13;
pub const PSNRET_NOERROR: LRESULT =
0;
pub const PSNRET_INVALID: LRESULT =
1;
pub const PSNRET_INVALID_NOCHANGEPAGE: LRESULT =
2;
pub const PSNRET_MESSAGEHANDLED: LRESULT =
3;
pub const PSM_SETCURSEL: UINT = WM_USER +
101;
pub const PSM_REMOVEPAGE: UINT = WM_USER +
102;
pub const PSM_ADDPAGE: UINT = WM_USER +
103;
pub const PSM_CHANGED: UINT = WM_USER +
104;
pub const PSM_RESTARTWINDOWS: UINT = WM_USER +
105;
pub const PSM_REBOOTSYSTEM: UINT = WM_USER +
106;
pub const PSM_CANCELTOCLOSE: UINT = WM_USER +
107;
pub const PSM_QUERYSIBLINGS: UINT = WM_USER +
108;
pub const PSM_UNCHANGED: UINT = WM_USER +
109;
pub const PSM_APPLY: UINT = WM_USER +
110;
pub const PSM_SETTITLEA: UINT = WM_USER +
111;
pub const PSM_SETTITLEW: UINT = WM_USER +
120;
pub const PSM_SETWIZBUTTONS: UINT = WM_USER +
112;
pub const PSWIZB_BACK: DWORD =
0x00000001;
pub const PSWIZB_NEXT: DWORD =
0x00000002;
pub const PSWIZB_FINISH: DWORD =
0x00000004;
pub const PSWIZB_DISABLEDFINISH: DWORD =
0x00000008;
pub const PSWIZBF_ELEVATIONREQUIRED: WPARAM =
0x00000001;
pub const PSWIZB_CANCEL: DWORD =
0x00000010;
pub const PSM_PRESSBUTTON: UINT = WM_USER +
113;
pub const PSBTN_BACK: c_int =
0;
pub const PSBTN_NEXT: c_int =
1;
pub const PSBTN_FINISH: c_int =
2;
pub const PSBTN_OK: c_int =
3;
pub const PSBTN_APPLYNOW: c_int =
4;
pub const PSBTN_CANCEL: c_int =
5;
pub const PSBTN_HELP: c_int =
6;
pub const PSBTN_MAX: c_int =
6;
pub const PSM_SETCURSELID: UINT = WM_USER +
114;
pub const PSM_SETFINISHTEXTA: UINT = WM_USER +
115;
pub const PSM_SETFINISHTEXTW: UINT = WM_USER +
121;
pub const PSM_GETTABCONTROL: UINT = WM_USER +
116;
pub const PSM_ISDIALOGMESSAGE: UINT = WM_USER +
117;
pub const PSM_GETCURRENTPAGEHWND: UINT = WM_USER +
118;
pub const PSM_INSERTPAGE: UINT = WM_USER +
119;
pub const PSM_SETHEADERTITLEA: UINT = WM_USER +
125;
pub const PSM_SETHEADERTITLEW: UINT = WM_USER +
126;
pub const PSWIZF_SETCOLOR: UINT = -
1i32
as u32;
pub const PSM_SETHEADERSUBTITLEA: UINT = WM_USER +
127;
pub const PSM_SETHEADERSUBTITLEW: UINT = WM_USER +
128;
pub const PSM_HWNDTOINDEX: UINT = WM_USER +
129;
pub const PSM_INDEXTOHWND: UINT = WM_USER +
130;
pub const PSM_PAGETOINDEX: UINT = WM_USER +
131;
pub const PSM_INDEXTOPAGE: UINT = WM_USER +
132;
pub const PSM_IDTOINDEX: UINT = WM_USER +
133;
pub const PSM_INDEXTOID: UINT = WM_USER +
134;
pub const PSM_GETRESULT: UINT = WM_USER +
135;
pub const PSM_RECALCPAGESIZES: UINT = WM_USER +
136;
pub const PSM_SETNEXTTEXTW: UINT = WM_USER +
137;
pub const PSM_SHOWWIZBUTTONS: UINT = WM_USER +
138;
pub const PSM_ENABLEWIZBUTTONS: UINT = WM_USER +
139;
pub const PSM_SETBUTTONTEXTW: UINT = WM_USER +
140;
pub const PSM_SETBUTTONTEXT: UINT = PSM_SETBUTTONTEXTW;
pub const ID_PSRESTARTWINDOWS: INT_PTR =
0x2;
pub const ID_PSREBOOTSYSTEM: INT_PTR = ID_PSRESTARTWINDOWS |
0x1;
pub const WIZ_CXDLG: DWORD =
276;
pub const WIZ_CYDLG: DWORD =
140;
pub const WIZ_CXBMP: DWORD =
80;
pub const WIZ_BODYX: DWORD =
92;
pub const WIZ_BODYCX: DWORD =
184;
pub const PROP_SM_CXDLG: c_short =
212;
pub const PROP_SM_CYDLG: c_short =
188;
pub const PROP_MED_CXDLG: c_short =
227;
pub const PROP_MED_CYDLG: c_short =
215;
pub const PROP_LG_CXDLG: c_short =
252;
pub const PROP_LG_CYDLG: c_short =
218;