713 lines
22 KiB
Rust
713 lines
22 KiB
Rust
// 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.
|
|
//! 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;
|