Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0
// 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;