// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! 32-Bit Common Dialog APIs use ctypes::{c_short, c_void}; use shared::basetsd::UINT_PTR; use shared::minwindef::{ BOOL, DWORD, HGLOBAL, HINSTANCE, INT, LPARAM, LPVOID, LRESULT, UINT, WORD, WPARAM, }; use shared::windef::{COLORREF, HDC, HWND, POINT, RECT}; use um::prsht::HPROPSHEETPAGE; use um::unknwnbase::{IUnknown, IUnknownVtbl, LPUNKNOWN}; use um::wingdi::{DM_COLLATE, DM_COPIES, LPDEVMODEW, LPLOGFONTA, LPLOGFONTW}; use um::winnt::{HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR}; use um::winuser::{NMHDR, WM_USER}; FN!{stdcall LPOFNHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAME_NT4A { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, lpstrFilter: LPCSTR, lpstrCustomFilter: LPSTR, nMaxCustFilter: DWORD, nFilterIndex: DWORD, lpstrFile: LPSTR, nMaxFile: DWORD, lpstrFileTitle: LPSTR, nMaxFileTitle: DWORD, lpstrInitialDir: LPCSTR, lpstrTitle: LPCSTR, Flags: DWORD, nFileOffset: WORD, nFileExtension: WORD, lpstrDefExt: LPCSTR, lCustData: LPARAM, lpfnHook: LPOFNHOOKPROC, lpTemplateName: LPCSTR, }} pub type LPOPENFILENAME_NT4A = *mut OPENFILENAME_NT4A; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAME_NT4W { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, lpstrFilter: LPCWSTR, lpstrCustomFilter: LPWSTR, nMaxCustFilter: DWORD, nFilterIndex: DWORD, lpstrFile: LPWSTR, nMaxFile: DWORD, lpstrFileTitle: LPWSTR, nMaxFileTitle: DWORD, lpstrInitialDir: LPCWSTR, lpstrTitle: LPCWSTR, Flags: DWORD, nFileOffset: WORD, nFileExtension: WORD, lpstrDefExt: LPCWSTR, lCustData: LPARAM, lpfnHook: LPOFNHOOKPROC, lpTemplateName: LPCWSTR, }} pub type LPOPENFILENAME_NT4W = *mut OPENFILENAME_NT4W; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAMEA { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, lpstrFilter: LPCSTR, lpstrCustomFilter: LPSTR, nMaxCustFilter: DWORD, nFilterIndex: DWORD, lpstrFile: LPSTR, nMaxFile: DWORD, lpstrFileTitle: LPSTR, nMaxFileTitle: DWORD, lpstrInitialDir: LPCSTR, lpstrTitle: LPCSTR, Flags: DWORD, nFileOffset: WORD, nFileExtension: WORD, lpstrDefExt: LPCSTR, lCustData: LPARAM, lpfnHook: LPOFNHOOKPROC, lpTemplateName: LPCSTR, pvReserved: *mut c_void, dwReserved: DWORD, FlagsEx: DWORD, }} pub type LPOPENFILENAMEA = *mut OPENFILENAMEA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAMEW { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, lpstrFilter: LPCWSTR, lpstrCustomFilter: LPWSTR, nMaxCustFilter: DWORD, nFilterIndex: DWORD, lpstrFile: LPWSTR, nMaxFile: DWORD, lpstrFileTitle: LPWSTR, nMaxFileTitle: DWORD, lpstrInitialDir: LPCWSTR, lpstrTitle: LPCWSTR, Flags: DWORD, nFileOffset: WORD, nFileExtension: WORD, lpstrDefExt: LPCWSTR, lCustData: LPARAM, lpfnHook: LPOFNHOOKPROC, lpTemplateName: LPCWSTR, pvReserved: *mut c_void, dwReserved: DWORD, FlagsEx: DWORD, }} pub type LPOPENFILENAMEW = *mut OPENFILENAMEW; extern "system" { pub fn GetOpenFileNameA( lpofn: LPOPENFILENAMEA, ) -> BOOL; pub fn GetOpenFileNameW( lpofn: LPOPENFILENAMEW, ) -> BOOL; pub fn GetSaveFileNameA( lpofn: LPOPENFILENAMEA, ) -> BOOL; pub fn GetSaveFileNameW( lpofn: LPOPENFILENAMEW, ) -> BOOL; pub fn GetFileTitleA( lpszFile: LPCSTR, Buf: LPSTR, cchSize: WORD, ) -> c_short; pub fn GetFileTitleW( lpszFile: LPCWSTR, Buf: LPWSTR, cchSize: WORD, ) -> c_short; } pub const OFN_READONLY: DWORD = 0x00000001; pub const OFN_OVERWRITEPROMPT: DWORD = 0x00000002; pub const OFN_HIDEREADONLY: DWORD = 0x00000004; pub const OFN_NOCHANGEDIR: DWORD = 0x00000008; pub const OFN_SHOWHELP: DWORD = 0x00000010; pub const OFN_ENABLEHOOK: DWORD = 0x00000020; pub const OFN_ENABLETEMPLATE: DWORD = 0x00000040; pub const OFN_ENABLETEMPLATEHANDLE: DWORD = 0x00000080; pub const OFN_NOVALIDATE: DWORD = 0x00000100; pub const OFN_ALLOWMULTISELECT: DWORD = 0x00000200; pub const OFN_EXTENSIONDIFFERENT: DWORD = 0x00000400; pub const OFN_PATHMUSTEXIST: DWORD = 0x00000800; pub const OFN_FILEMUSTEXIST: DWORD = 0x00001000; pub const OFN_CREATEPROMPT: DWORD = 0x00002000; pub const OFN_SHAREAWARE: DWORD = 0x00004000; pub const OFN_NOREADONLYRETURN: DWORD = 0x00008000; pub const OFN_NOTESTFILECREATE: DWORD = 0x00010000; pub const OFN_NONETWORKBUTTON: DWORD = 0x00020000; pub const OFN_NOLONGNAMES: DWORD = 0x00040000; pub const OFN_EXPLORER: DWORD = 0x00080000; pub const OFN_NODEREFERENCELINKS: DWORD = 0x00100000; pub const OFN_LONGNAMES: DWORD = 0x00200000; pub const OFN_ENABLEINCLUDENOTIFY: DWORD = 0x00400000; pub const OFN_ENABLESIZING: DWORD = 0x00800000; pub const OFN_DONTADDTORECENT: DWORD = 0x02000000; pub const OFN_FORCESHOWHIDDEN: DWORD = 0x10000000; pub const OFN_EX_NOPLACESBAR: DWORD = 0x00000001; pub const OFN_SHAREFALLTHROUGH: UINT_PTR = 2; pub const OFN_SHARENOWARN: UINT_PTR = 1; pub const OFN_SHAREWARN: UINT_PTR = 0; FN!{stdcall LPCCHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYA { hdr: NMHDR, lpOFN: LPOPENFILENAMEA, pszFile: LPSTR, }} pub type LPOFNOTIFYA = *mut OFNOTIFYA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYW { hdr: NMHDR, lpOFN: LPOPENFILENAMEW, pszFile: LPWSTR, }} pub type LPOFNOTIFYW = *mut OFNOTIFYW; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYEXA { hdr: NMHDR, lpOFN: LPOPENFILENAMEA, psf: LPVOID, pidl: LPVOID, }} pub type LPOFNOTIFYEXA = *mut OFNOTIFYEXA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYEXW { hdr: NMHDR, lpOFN: LPOPENFILENAMEW, psf: LPVOID, pidl: LPVOID, }} pub type LPOFNOTIFYEXW = *mut OFNOTIFYEXW; pub const CDN_FIRST: UINT = -601i32 as u32; pub const CDN_LAST: UINT = -699i32 as u32; pub const CDN_INITDONE: UINT = CDN_FIRST - 0x0000; pub const CDN_SELCHANGE: UINT = CDN_FIRST - 0x0001; pub const CDN_FOLDERCHANGE: UINT = CDN_FIRST - 0x0002; pub const CDN_SHAREVIOLATION: UINT = CDN_FIRST - 0x0003; pub const CDN_HELP: UINT = CDN_FIRST - 0x0004; pub const CDN_FILEOK: UINT = CDN_FIRST - 0x0005; pub const CDN_TYPECHANGE: UINT = CDN_FIRST - 0x0006; pub const CDN_INCLUDEITEM: UINT = CDN_FIRST - 0x0007; pub const CDM_FIRST: UINT = WM_USER + 100; pub const CDM_LAST: UINT = WM_USER + 200; pub const CDM_GETSPEC: UINT = CDM_FIRST + 0x0000; pub const CDM_GETFILEPATH: UINT = CDM_FIRST + 0x0001; pub const CDM_GETFOLDERPATH: UINT = CDM_FIRST + 0x0002; pub const CDM_GETFOLDERIDLIST: UINT = CDM_FIRST + 0x0003; pub const CDM_SETCONTROLTEXT: UINT = CDM_FIRST + 0x0004; pub const CDM_HIDECONTROL: UINT = CDM_FIRST + 0x0005; pub const CDM_SETDEFEXT: UINT = CDM_FIRST + 0x0006; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSECOLORA { lStructSize: DWORD, hwndOwner: HWND, hInstance: HWND, rgbResult: COLORREF, lpCustColors: *mut COLORREF, Flags: DWORD, lCustData: LPARAM, lpfnHook: LPCCHOOKPROC, lpTemplateName: LPCSTR, }} pub type LPCHOOSECOLORA = *mut CHOOSECOLORA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSECOLORW { lStructSize: DWORD, hwndOwner: HWND, hInstance: HWND, rgbResult: COLORREF, lpCustColors: *mut COLORREF, Flags: DWORD, lCustData: LPARAM, lpfnHook: LPCCHOOKPROC, lpTemplateName: LPCWSTR, }} pub type LPCHOOSECOLORW = *mut CHOOSECOLORW; extern "system" { pub fn ChooseColorA( lpcc: LPCHOOSECOLORA, ) -> BOOL; pub fn ChooseColorW( lpcc: LPCHOOSECOLORW, ) -> BOOL; } pub const CC_RGBINIT: DWORD = 0x00000001; pub const CC_FULLOPEN: DWORD = 0x00000002; pub const CC_PREVENTFULLOPEN: DWORD = 0x00000004; pub const CC_SHOWHELP: DWORD = 0x00000008; pub const CC_ENABLEHOOK: DWORD = 0x00000010; pub const CC_ENABLETEMPLATE: DWORD = 0x00000020; pub const CC_ENABLETEMPLATEHANDLE: DWORD = 0x00000040; pub const CC_SOLIDCOLOR: DWORD = 0x00000080; pub const CC_ANYCOLOR: DWORD = 0x00000100; FN!{stdcall LPFRHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FINDREPLACEA { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, Flags: DWORD, lpstrFindWhat: LPSTR, lpstrReplaceWith: LPSTR, wFindWhatLen: WORD, wReplaceWithLen: WORD, lCustData: LPARAM, lpfnHook: LPFRHOOKPROC, lpTemplateName: LPCSTR, }} pub type LPFINDREPLACEA = *mut FINDREPLACEA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FINDREPLACEW { lStructSize: DWORD, hwndOwner: HWND, hInstance: HINSTANCE, Flags: DWORD, lpstrFindWhat: LPWSTR, lpstrReplaceWith: LPWSTR, wFindWhatLen: WORD, wReplaceWithLen: WORD, lCustData: LPARAM, lpfnHook: LPFRHOOKPROC, lpTemplateName: LPCWSTR, }} pub type LPFINDREPLACEW = *mut FINDREPLACEW; pub const FR_DOWN: DWORD = 0x00000001; pub const FR_WHOLEWORD: DWORD = 0x00000002; pub const FR_MATCHCASE: DWORD = 0x00000004; pub const FR_FINDNEXT: DWORD = 0x00000008; pub const FR_REPLACE: DWORD = 0x00000010; pub const FR_REPLACEALL: DWORD = 0x00000020; pub const FR_DIALOGTERM: DWORD = 0x00000040; pub const FR_SHOWHELP: DWORD = 0x00000080; pub const FR_ENABLEHOOK: DWORD = 0x00000100; pub const FR_ENABLETEMPLATE: DWORD = 0x00000200; pub const FR_NOUPDOWN: DWORD = 0x00000400; pub const FR_NOMATCHCASE: DWORD = 0x00000800; pub const FR_NOWHOLEWORD: DWORD = 0x00001000; pub const FR_ENABLETEMPLATEHANDLE: DWORD = 0x00002000; pub const FR_HIDEUPDOWN: DWORD = 0x00004000; pub const FR_HIDEMATCHCASE: DWORD = 0x00008000; pub const FR_HIDEWHOLEWORD: DWORD = 0x00010000; pub const FR_RAW: DWORD = 0x00020000; pub const FR_MATCHDIAC: DWORD = 0x20000000; pub const FR_MATCHKASHIDA: DWORD = 0x40000000; pub const FR_MATCHALEFHAMZA: DWORD = 0x80000000; extern "system" { pub fn FindTextA( lpfr: LPFINDREPLACEA, ) -> HWND; pub fn FindTextW( lpfr: LPFINDREPLACEW, ) -> HWND; pub fn ReplaceTextA( lpfr: LPFINDREPLACEA, ) -> HWND; pub fn ReplaceTextW( lpfr: LPFINDREPLACEW, ) -> HWND; } FN!{stdcall LPCFHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSEFONTA { lStructSize: DWORD, hwndOwner: HWND, hDC: HDC, lpLogFont: LPLOGFONTA, iPointSize: INT, Flags: DWORD, rgbColors: COLORREF, lCustData: LPARAM, lpfnHook: LPCFHOOKPROC, lpTemplateName: LPCSTR, hInstance: HINSTANCE, lpszStyle: LPSTR, nFontType: WORD, ___MISSING_ALIGNMENT__: WORD, nSizeMin: INT, nSizeMax: INT, }} pub type LPCHOOSEFONTA = *mut CHOOSEFONTA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSEFONTW { lStructSize: DWORD, hwndOwner: HWND, hDC: HDC, lpLogFont: LPLOGFONTW, iPointSize: INT, Flags: DWORD, rgbColors: COLORREF, lCustData: LPARAM, lpfnHook: LPCFHOOKPROC, lpTemplateName: LPCWSTR, hInstance: HINSTANCE, lpszStyle: LPWSTR, nFontType: WORD, ___MISSING_ALIGNMENT__: WORD, nSizeMin: INT, nSizeMax: INT, }} pub type LPCHOOSEFONTW = *mut CHOOSEFONTW; extern "system" { pub fn ChooseFontA( lpcf: LPCHOOSEFONTA, ) -> BOOL; pub fn ChooseFontW( lpcf: LPCHOOSEFONTW, ) -> BOOL; } pub const CF_SCREENFONTS: DWORD = 0x00000001; pub const CF_PRINTERFONTS: DWORD = 0x00000002; pub const CF_BOTH: DWORD = CF_SCREENFONTS | CF_PRINTERFONTS; pub const CF_SHOWHELP: DWORD = 0x00000004; pub const CF_ENABLEHOOK: DWORD = 0x00000008; pub const CF_ENABLETEMPLATE: DWORD = 0x00000010; pub const CF_ENABLETEMPLATEHANDLE: DWORD = 0x00000020; pub const CF_INITTOLOGFONTSTRUCT: DWORD = 0x00000040; pub const CF_USESTYLE: DWORD = 0x00000080; pub const CF_EFFECTS: DWORD = 0x00000100; pub const CF_APPLY: DWORD = 0x00000200; pub const CF_ANSIONLY: DWORD = 0x00000400; pub const CF_SCRIPTSONLY: DWORD = CF_ANSIONLY; pub const CF_NOVECTORFONTS: DWORD = 0x00000800; pub const CF_NOOEMFONTS: DWORD = CF_NOVECTORFONTS; pub const CF_NOSIMULATIONS: DWORD = 0x00001000; pub const CF_LIMITSIZE: DWORD = 0x00002000; pub const CF_FIXEDPITCHONLY: DWORD = 0x00004000; pub const CF_WYSIWYG: DWORD = 0x00008000; pub const CF_FORCEFONTEXIST: DWORD = 0x00010000; pub const CF_SCALABLEONLY: DWORD = 0x00020000; pub const CF_TTONLY: DWORD = 0x00040000; pub const CF_NOFACESEL: DWORD = 0x00080000; pub const CF_NOSTYLESEL: DWORD = 0x00100000; pub const CF_NOSIZESEL: DWORD = 0x00200000; pub const CF_SELECTSCRIPT: DWORD = 0x00400000; pub const CF_NOSCRIPTSEL: DWORD = 0x00800000; pub const CF_NOVERTFONTS: DWORD = 0x01000000; pub const CF_INACTIVEFONTS: DWORD = 0x02000000; pub const SIMULATED_FONTTYPE: WORD = 0x8000; pub const PRINTER_FONTTYPE: WORD = 0x4000; pub const SCREEN_FONTTYPE: WORD = 0x2000; pub const BOLD_FONTTYPE: WORD = 0x0100; pub const ITALIC_FONTTYPE: WORD = 0x0200; pub const REGULAR_FONTTYPE: WORD = 0x0400; pub const PS_OPENTYPE_FONTTYPE: DWORD = 0x10000; pub const TT_OPENTYPE_FONTTYPE: DWORD = 0x20000; pub const TYPE1_FONTTYPE: DWORD = 0x40000; pub const SYMBOL_FONTTYPE: DWORD = 0x80000; pub const WM_CHOOSEFONT_GETLOGFONT: UINT = WM_USER + 1; pub const WM_CHOOSEFONT_SETLOGFONT: UINT = WM_USER + 101; pub const WM_CHOOSEFONT_SETFLAGS: UINT = WM_USER + 102; pub const CD_LBSELNOITEMS: WORD = -1i16 as u16; pub const CD_LBSELCHANGE: WORD = 0; pub const CD_LBSELSUB: WORD = 1; pub const CD_LBSELADD: WORD = 2; FN!{stdcall LPPRINTHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} FN!{stdcall LPSETUPHOOKPROC( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGA { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, hDC: HDC, Flags: DWORD, nFromPage: WORD, nToPage: WORD, nMinPage: WORD, nMaxPage: WORD, nCopies: WORD, hInstance: HINSTANCE, lCustData: LPARAM, lpfnPrintHook: LPPRINTHOOKPROC, lpfnSetupHook: LPSETUPHOOKPROC, lpPrintTemplateName: LPCSTR, lpSetupTemplateName: LPCSTR, hPrintTemplate: HGLOBAL, hSetupTemplate: HGLOBAL, }} pub type LPPRINTDLGA = *mut PRINTDLGA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGW { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, hDC: HDC, Flags: DWORD, nFromPage: WORD, nToPage: WORD, nMinPage: WORD, nMaxPage: WORD, nCopies: WORD, hInstance: HINSTANCE, lCustData: LPARAM, lpfnPrintHook: LPPRINTHOOKPROC, lpfnSetupHook: LPSETUPHOOKPROC, lpPrintTemplateName: LPCWSTR, lpSetupTemplateName: LPCWSTR, hPrintTemplate: HGLOBAL, hSetupTemplate: HGLOBAL, }} pub type LPPRINTDLGW = *mut PRINTDLGW; extern "system" { pub fn PrintDlgA( pPD: LPPRINTDLGA, ) -> BOOL; pub fn PrintDlgW( pPD: LPPRINTDLGW, ) -> BOOL; } RIDL!{#[uuid(0x5852a2c3, 0x6530, 0x11d1, 0xb6, 0xa3, 0x0, 0x0, 0xf8, 0x75, 0x7b, 0xf9)] interface IPrintDialogCallback(IPrintDialogCallbackVtbl): IUnknown(IUnknownVtbl) { fn InitDone() -> HRESULT, fn SelectionChange() -> HRESULT, fn HandleMessage( hDlg: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM, pResult: *mut LRESULT, ) -> HRESULT, }} RIDL!{#[uuid(0x509aaeda, 0x5639, 0x11d1, 0xb6, 0xa1, 0x0, 0x0, 0xf8, 0x75, 0x7b, 0xf9)] interface IPrintDialogServices(IPrintDialogServicesVtbl): IUnknown(IUnknownVtbl) { fn GetCurrentDevMode( pDevMode: LPDEVMODEW, pcbSize: *mut UINT, ) -> HRESULT, fn GetCurrentPrinterName( pPrinterName: LPWSTR, pcchSize: *mut UINT, ) -> HRESULT, fn GetCurrentPortName( pPortName: LPWSTR, pcchSize: *mut UINT, ) -> HRESULT, }} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTPAGERANGE { nFromPage: DWORD, nToPage: DWORD, }} pub type LPPRINTPAGERANGE = *mut PRINTPAGERANGE; pub type PCPRINTPAGERANGE = *const PRINTPAGERANGE; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGEXA { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, hDC: HDC, Flags: DWORD, Flags2: DWORD, ExclusionFlags: DWORD, nPageRanges: DWORD, nMaxPageRanges: DWORD, lpPageRanges: LPPRINTPAGERANGE, nMinPage: DWORD, nMaxPage: DWORD, nCopies: DWORD, hInstance: HINSTANCE, lpPrintTemplateName: LPCSTR, lpCallback: LPUNKNOWN, nPropertyPages: DWORD, lphPropertyPages: *mut HPROPSHEETPAGE, nStartPage: DWORD, dwResultAction: DWORD, }} pub type LPPRINTDLGEXA = *mut PRINTDLGEXA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGEXW { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, hDC: HDC, Flags: DWORD, Flags2: DWORD, ExclusionFlags: DWORD, nPageRanges: DWORD, nMaxPageRanges: DWORD, lpPageRanges: LPPRINTPAGERANGE, nMinPage: DWORD, nMaxPage: DWORD, nCopies: DWORD, hInstance: HINSTANCE, lpPrintTemplateName: LPCWSTR, lpCallback: LPUNKNOWN, nPropertyPages: DWORD, lphPropertyPages: *mut HPROPSHEETPAGE, nStartPage: DWORD, dwResultAction: DWORD, }} pub type LPPRINTDLGEXW = *mut PRINTDLGEXW; extern "system" { pub fn PrintDlgExA( pPD: LPPRINTDLGEXA, ) -> HRESULT; pub fn PrintDlgExW( pPD: LPPRINTDLGEXW, ) -> HRESULT; } pub const PD_ALLPAGES: DWORD = 0x00000000; pub const PD_SELECTION: DWORD = 0x00000001; pub const PD_PAGENUMS: DWORD = 0x00000002; pub const PD_NOSELECTION: DWORD = 0x00000004; pub const PD_NOPAGENUMS: DWORD = 0x00000008; pub const PD_COLLATE: DWORD = 0x00000010; pub const PD_PRINTTOFILE: DWORD = 0x00000020; pub const PD_PRINTSETUP: DWORD = 0x00000040; pub const PD_NOWARNING: DWORD = 0x00000080; pub const PD_RETURNDC: DWORD = 0x00000100; pub const PD_RETURNIC: DWORD = 0x00000200; pub const PD_RETURNDEFAULT: DWORD = 0x00000400; pub const PD_SHOWHELP: DWORD = 0x00000800; pub const PD_ENABLEPRINTHOOK: DWORD = 0x00001000; pub const PD_ENABLESETUPHOOK: DWORD = 0x00002000; pub const PD_ENABLEPRINTTEMPLATE: DWORD = 0x00004000; pub const PD_ENABLESETUPTEMPLATE: DWORD = 0x00008000; pub const PD_ENABLEPRINTTEMPLATEHANDLE: DWORD = 0x00010000; pub const PD_ENABLESETUPTEMPLATEHANDLE: DWORD = 0x00020000; pub const PD_USEDEVMODECOPIES: DWORD = 0x00040000; pub const PD_USEDEVMODECOPIESANDCOLLATE: DWORD = 0x00040000; pub const PD_DISABLEPRINTTOFILE: DWORD = 0x00080000; pub const PD_HIDEPRINTTOFILE: DWORD = 0x00100000; pub const PD_NONETWORKBUTTON: DWORD = 0x00200000; pub const PD_CURRENTPAGE: DWORD = 0x00400000; pub const PD_NOCURRENTPAGE: DWORD = 0x00800000; pub const PD_EXCLUSIONFLAGS: DWORD = 0x01000000; pub const PD_USELARGETEMPLATE: DWORD = 0x10000000; pub const PD_EXCL_COPIESANDCOLLATE: DWORD = DM_COPIES | DM_COLLATE; pub const START_PAGE_GENERAL: DWORD = 0xffffffff; pub const PD_RESULT_CANCEL: DWORD = 0; pub const PD_RESULT_PRINT: DWORD = 1; pub const PD_RESULT_APPLY: DWORD = 2; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct DEVNAMES { wDriverOffset: WORD, wDeviceOffset: WORD, wOutputOffset: WORD, wDefault: WORD, }} pub type LPDEVNAMES = *mut DEVNAMES; pub type PCDEVNAMES = *const DEVNAMES; pub const DN_DEFAULTPRN: WORD = 0x0001; extern "system" { pub fn CommDlgExtendedError() -> DWORD; } pub const WM_PSD_PAGESETUPDLG: UINT = WM_USER; pub const WM_PSD_FULLPAGERECT: UINT = WM_USER + 1; pub const WM_PSD_MINMARGINRECT: UINT = WM_USER + 2; pub const WM_PSD_MARGINRECT: UINT = WM_USER + 3; pub const WM_PSD_GREEKTEXTRECT: UINT = WM_USER + 4; pub const WM_PSD_ENVSTAMPRECT: UINT = WM_USER + 5; pub const WM_PSD_YAFULLPAGERECT: UINT = WM_USER + 6; FN!{stdcall LPPAGEPAINTHOOK( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} FN!{stdcall LPPAGESETUPHOOK( HWND, UINT, WPARAM, LPARAM, ) -> UINT_PTR} STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PAGESETUPDLGA { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, Flags: DWORD, ptPaperSize: POINT, rtMinMargin: RECT, rtMargin: RECT, hInstance: HINSTANCE, lCustData: LPARAM, lpfnPageSetupHook: LPPAGESETUPHOOK, lpfnPagePaintHook: LPPAGEPAINTHOOK, lpPageSetupTemplateName: LPCSTR, hPageSetupTemplate: HGLOBAL, }} pub type LPPAGESETUPDLGA = *mut PAGESETUPDLGA; STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PAGESETUPDLGW { lStructSize: DWORD, hwndOwner: HWND, hDevMode: HGLOBAL, hDevNames: HGLOBAL, Flags: DWORD, ptPaperSize: POINT, rtMinMargin: RECT, rtMargin: RECT, hInstance: HINSTANCE, lCustData: LPARAM, lpfnPageSetupHook: LPPAGESETUPHOOK, lpfnPagePaintHook: LPPAGEPAINTHOOK, lpPageSetupTemplateName: LPCWSTR, hPageSetupTemplate: HGLOBAL, }} pub type LPPAGESETUPDLGW = *mut PAGESETUPDLGW; extern "system" { pub fn PageSetupDlgA( lppsd: LPPAGESETUPDLGA, ) -> BOOL; pub fn PageSetupDlgW( lppsd: LPPAGESETUPDLGW, ) -> BOOL; } pub const PSD_DEFAULTMINMARGINS: DWORD = 0x00000000; pub const PSD_INWININIINTLMEASURE: DWORD = 0x00000000; pub const PSD_MINMARGINS: DWORD = 0x00000001; pub const PSD_MARGINS: DWORD = 0x00000002; pub const PSD_INTHOUSANDTHSOFINCHES: DWORD = 0x00000004; pub const PSD_INHUNDREDTHSOFMILLIMETERS: DWORD = 0x00000008; pub const PSD_DISABLEMARGINS: DWORD = 0x00000010; pub const PSD_DISABLEPRINTER: DWORD = 0x00000020; pub const PSD_NOWARNING: DWORD = 0x00000080; pub const PSD_DISABLEORIENTATION: DWORD = 0x00000100; pub const PSD_RETURNDEFAULT: DWORD = 0x00000400; pub const PSD_DISABLEPAPER: DWORD = 0x00000200; pub const PSD_SHOWHELP: DWORD = 0x00000800; pub const PSD_ENABLEPAGESETUPHOOK: DWORD = 0x00002000; pub const PSD_ENABLEPAGESETUPTEMPLATE: DWORD = 0x00008000; pub const PSD_ENABLEPAGESETUPTEMPLATEHANDLE: DWORD = 0x00020000; pub const PSD_ENABLEPAGEPAINTHOOK: DWORD = 0x00040000; pub const PSD_DISABLEPAGEPAINTING: DWORD = 0x00080000; pub const PSD_NONETWORKBUTTON: DWORD = 0x00200000;