Windows2000/private/shell/win16/comdlg/prnsetup.h
2020-09-30 17:12:32 +02:00

829 lines
17 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1990-1995, Microsoft Corporation All rights reserved.
Module Name:
prnsetup.h
Abstract:
This module contains the header information for the Win32 print dialogs.
Revision History:
*/
// Include Files.
#include <commdlgp.h>
#include <help.h>
// Constant Declarations.
#ifndef WINNT
#define COMDLG_ANSI 0x0
#define COMDLG_WIDE 0x1
#endif
#define PI_PRINTERS_ENUMERATED 0x00000001
#define PI_COLLATE_REQUESTED 0x00000002
#define PI_WPAPER_ENVELOPE 0x00000004 // wPaper is DMPAPER_ENV_x
#define PI_PRINTDLGX_RECURSE 0x00000008 // PrintDlgX calls PrintDlgX
#define PRNPROP (LPCTSTR) 0xA000L
#define DN_PADDINGCHARS 16 // extra devnames padding
#define MMS_PER_INCH 254 // 25.4 mms/inch
#define INCHES_DEFAULT 1000
#define MMS_DEFAULT 2540
#define COPIES_EDIT_SIZE 4
#define PAGE_EDIT_SIZE 5
#define MARGIN_EDIT_SIZE 6
#define CCHPAPERNAME 64
#define CCHBINNAME 24
#define ROTATE_LEFT 270 // dot-matrix
#define ROTATE_RIGHT 90 // HP PCL
#define MAX_DEV_SECT 512
#define BACKSPACE 8
#define SIZEOF_DEVICE_INFO 32
#define MAX_PRINTERNAME MAX_PATH
#define SCRATCHBUF_SIZE 256
// Constant Declarations for DLG file.
#define ID_BOTH_P_PROPERTIES psh2
#define ID_BOTH_P_NETWORK psh14
#define ID_BOTH_P_HELP psh15
#define ID_BOTH_S_PRINTER stc6
#define ID_BOTH_S_STATUS stc12
#define ID_BOTH_S_TYPE stc11
#define ID_BOTH_S_WHERE stc14
#define ID_BOTH_S_COMMENT stc13
#define ID_PRINT_X_TOFILE chx1
#define ID_PRINT_X_COLLATE chx2
#define ID_PRINT_C_QUALITY cmb1
#define ID_PRINT_C_NAME cmb4
#define ID_PRINT_E_FROM edt1
#define ID_PRINT_E_TO edt2
#define ID_PRINT_E_COPIES edt3
#define ID_PRINT_G_RANGE grp1
#define ID_PRINT_G_COPIES grp2
#define ID_PRINT_G_PRINTER grp4
#define ID_PRINT_I_COLLATE ico3
#define ID_PRINT_P_SETUP psh1
#define ID_PRINT_R_ALL rad1
#define ID_PRINT_R_SELECTION rad2
#define ID_PRINT_R_PAGES rad3
#define ID_PRINT_S_DEFAULT stc1
#define ID_PRINT_S_FROM stc2
#define ID_PRINT_S_TO stc3
#define ID_PRINT_S_QUALITY stc4
#define ID_PRINT_S_COPIES stc5
#define ID_SETUP_C_NAME cmb1
#define ID_SETUP_C_SIZE cmb2
#define ID_SETUP_C_SOURCE cmb3
#define ID_SETUP_E_LEFT edt4
#define ID_SETUP_E_TOP edt5
#define ID_SETUP_E_RIGHT edt6
#define ID_SETUP_E_BOTTOM edt7
#define ID_SETUP_G_ORIENTATION grp1
#define ID_SETUP_G_PAPER grp2
#define ID_SETUP_G_DUPLEX grp3
#define ID_SETUP_G_MARGINS grp4
#define ID_SETUP_I_ORIENTATION ico1
#define ID_SETUP_I_DUPLEX ico2
#define ID_SETUP_P_MORE psh1
#define ID_SETUP_P_PRINTER psh3
#define ID_SETUP_R_PORTRAIT rad1
#define ID_SETUP_R_LANDSCAPE rad2
#define ID_SETUP_R_DEFAULT rad3
#define ID_SETUP_R_SPECIFIC rad4
#define ID_SETUP_R_NONE rad5
#define ID_SETUP_R_LONG rad6
#define ID_SETUP_R_SHORT rad7
#define ID_SETUP_S_DEFAULT stc1
#define ID_SETUP_S_SIZE stc2
#define ID_SETUP_S_SOURCE stc3
#define ID_SETUP_S_LEFT stc15
#define ID_SETUP_S_RIGHT stc16
#define ID_SETUP_S_TOP stc17
#define ID_SETUP_S_BOTTOM stc18
#define ID_SETUP_W_SAMPLE rct1
#define ID_SETUP_W_SHADOWRIGHT rct2
#define ID_SETUP_W_SHADOWBOTTOM rct3
// Typedef Declarations.
typedef struct {
UINT ApiType;
LPPRINTDLG pPD;
LPPAGESETUPDLG pPSD;
DWORD cPrinters;
PRINTER_INFO_2 *pPrinters;
PRINTER_INFO_2 *pCurPrinter;
HANDLE hCurPrinter;
DWORD Status;
TCHAR szDefaultPrinter[MAX_PRINTERNAME];
WORD wPaper;
DWORD dwRotation;
UINT uiOrientationID;
POINT PtPaperSizeMMs;
RECT RtMinMarginMMs;
RECT RtMarginMMs;
POINT PtMargins;
RECT RtSampleXYWH;
BOOL bKillFocus;
DWORD ProcessVersion;
#ifdef UNICODE
LPPRINTDLGA pPDA;
BOOL bUseExtDeviceMode;
BOOL fPrintTemplateAlloc;
BOOL fSetupTemplateAlloc;
#endif
} PRINTINFO;
typedef PRINTINFO *PPRINTINFO;
// Global Variables.
#ifndef WINNT
UINT msgHELPA;
#endif
// Variables for dynamic loading of winspool.drv
typedef DWORD (WINAPI *LPFNADVANCEDDOCPROPS)(HWND, HANDLE, LPTSTR, PDEVMODE, PDEVMODE);
typedef DWORD (WINAPI *LPFNDEVICECAPABILITIES)(LPTSTR, LPTSTR, WORD, LPTSTR, LPDEVMODE);
typedef LONG (WINAPI *LPFNDOCUMENTPROPERTIES)(HWND, HANDLE, LPTSTR, PDEVMODE, PDEVMODE, DWORD);
typedef DWORD (WINAPI *LPFNENUMPRINTERS)(DWORD, LPTSTR, DWORD, LPBYTE, DWORD, LPDWORD, LPDWORD);
typedef DWORD (WINAPI *LPFNGETPRINTER)(HANDLE, DWORD, LPBYTE, DWORD, LPDWORD);
typedef DWORD (WINAPI *LPFNOPENPRINTER)(LPTSTR, LPHANDLE, LPPRINTER_DEFAULTS);
typedef DWORD (WINAPI *LPFNCLOSEPRINTER)(HANDLE);
#ifdef WINNT
typedef DWORD (WINAPI *LPFNCONNECTTOPRINTERDLG)(HWND, DWORD);
#else
typedef DWORD (WINAPI *LPFNWNETCONNECTIONDIALOG)(HWND, DWORD);
#endif
#ifdef UNICODE
typedef UINT (WINAPI *LPFNEXTDEVICEMODE)(HWND, HMODULE, LPDEVMODEA, LPSTR, LPSTR, LPDEVMODEA, LPSTR, UINT);
#endif
LPFNADVANCEDDOCPROPS WinSpool_AdvancedDocProps = NULL;
LPFNDEVICECAPABILITIES WinSpool_DeviceCapabilities = NULL;
LPFNDOCUMENTPROPERTIES WinSpool_DocumentProperties = NULL;
LPFNENUMPRINTERS WinSpool_EnumPrinters = NULL;
LPFNGETPRINTER WinSpool_GetPrinter = NULL;
LPFNOPENPRINTER WinSpool_OpenPrinter = NULL;
LPFNCLOSEPRINTER WinSpool_ClosePrinter = NULL;
#ifdef WINNT
LPFNCONNECTTOPRINTERDLG WinSpool_ConnectToPrinterDlg = NULL;
#else
LPFNWNETCONNECTIONDIALOG MPR_WNetConnectionDialog = NULL;
#endif
#ifdef UNICODE
LPFNEXTDEVICEMODE WinSpool_ExtDeviceMode = NULL;
#endif
// GetProcAddrW does not exist
#ifdef UNICODE
CHAR szAdvancedDocProps[] = "AdvancedDocumentPropertiesW";
CHAR szDeviceCapabilities[] = "DeviceCapabilitiesW";
CHAR szDocumentProperties[] = "DocumentPropertiesW";
CHAR szEnumPrinters[] = "EnumPrintersW";
CHAR szGetPrinter[] = "GetPrinterW";
CHAR szOpenPrinter[] = "OpenPrinterW";
#else
CHAR szAdvancedDocProps[] = "AdvancedDocumentPropertiesA";
CHAR szDeviceCapabilities[] = "DeviceCapabilitiesA";
CHAR szDocumentProperties[] = "DocumentPropertiesA";
CHAR szEnumPrinters[] = "EnumPrintersA";
CHAR szGetPrinter[] = "GetPrinterA";
CHAR szOpenPrinter[] = "OpenPrinterA";
#endif
CHAR szClosePrinter[] = "ClosePrinter";
#ifdef WINNT
CHAR szConnectToPrinterDlg[] = "ConnectToPrinterDlg";
#else
CHAR szWNetConnectionDialog[] = "WNetConnectionDialog";
#endif
#ifdef UNICODE
CHAR szExtDeviceMode[] = "ExtDeviceMode";
#endif
static TCHAR szTextWindows[] = TEXT("Windows");
static TCHAR szTextDevices[] = TEXT("devices");
static TCHAR szTextDevice[] = TEXT("device");
static TCHAR szTextNull[] = TEXT("");
static TCHAR szFilePort[] = TEXT("FILE:");
static TCHAR szDriver[] = TEXT("winspool");
#ifndef WINNT
static TCHAR szCommdlgHelp[] = HELPMSGSTRING;
#endif
LPPRINTHOOKPROC glpfnPrintHook = NULL;
LPSETUPHOOKPROC glpfnSetupHook = NULL;
WNDPROC lpEditNumOnlyProc = NULL;
WNDPROC lpEditMarginProc = NULL;
WNDPROC lpStaticProc = NULL;
HKEY hPrinterKey;
TCHAR *szRegistryPrinter = TEXT("Printers");
TCHAR *szRegistryDefaultValueName = TEXT("Default");
HANDLE hWinSpool = NULL;
TCHAR szWinspool[] = TEXT("WINSPOOL.DRV");
#ifndef WINNT
HANDLE hMPR = NULL;
TCHAR szMprDll[] = TEXT("mpr.dll");
#endif
static HANDLE hIconCollate = NULL; // Image
static HANDLE hIconNoCollate = NULL; // Image
static HICON hIconPortrait = NULL; // Icon
static HICON hIconLandscape = NULL; // Icon
static HICON hIconPDuplexNone = NULL; // Icon
static HICON hIconLDuplexNone = NULL; // Icon
static HICON hIconPDuplexTumble = NULL; // Icon
static HICON hIconLDuplexTumble = NULL; // Icon
static HICON hIconPDuplexNoTumble = NULL; // Icon
static HICON hIconLDuplexNoTumble = NULL; // Icon
static HICON hIconPSStampP = NULL; // Icon
static HICON hIconPSStampL = NULL; // Icon
static TCHAR cIntlDecimal = CHAR_NULL; // decimal separator (.)
static TCHAR cIntlMeasure[5] = TEXT(""); // measurement designator ("/mm)
static int cchIntlMeasure = 0; // # of chars in cIntlMeasure
static TCHAR szDefaultSrc[SCRATCHBUF_SIZE] = TEXT("");
// Context Help IDs.
#pragma data_seg(".text")
const static DWORD aPrintHelpIDs[] = // Context Help IDs
{
// for Print dialog
grp4, IDH_PRINT_CHOOSE_PRINTER,
stc6, IDH_PRINT_CHOOSE_PRINTER,
cmb4, IDH_PRINT_CHOOSE_PRINTER,
psh2, IDH_PRINT_PROPERTIES,
stc8, IDH_PRINT_SETUP_DETAILS,
stc12, IDH_PRINT_SETUP_DETAILS,
stc7, IDH_PRINT_SETUP_DETAILS,
stc11, IDH_PRINT_SETUP_DETAILS,
stc10, IDH_PRINT_SETUP_DETAILS,
stc14, IDH_PRINT_SETUP_DETAILS,
stc9, IDH_PRINT_SETUP_DETAILS,
stc13, IDH_PRINT_SETUP_DETAILS,
chx1, IDH_PRINT_TO_FILE,
grp1, IDH_PRINT32_RANGE,
ico1, IDH_PRINT32_RANGE,
rad1, IDH_PRINT32_RANGE,
rad2, IDH_PRINT32_RANGE,
rad3, IDH_PRINT32_RANGE,
stc2, IDH_PRINT32_RANGE,
edt1, IDH_PRINT32_RANGE,
stc3, IDH_PRINT32_RANGE,
edt2, IDH_PRINT32_RANGE,
grp2, IDH_COMM_GROUPBOX,
edt3, IDH_PRINT_COPIES,
ico3, IDH_PRINT_COLLATE,
chx2, IDH_PRINT_COLLATE,
// for win3.1 Print template
stc1, IDH_PRINT_SETUP_DETAILS,
stc4, IDH_PRINT_QUALITY,
cmb1, IDH_PRINT_QUALITY,
stc5, IDH_PRINT_COPIES,
psh1, IDH_PRINT_PRINTER_SETUP,
psh14, IDH_PRINT_NETWORK,
psh15, IDH_HELP,
0, 0
};
const static DWORD aPrintSetupHelpIDs[] = // Context Help IDs
{
// for PrintSetup dialog
grp4, IDH_PRINT_CHOOSE_PRINTER,
stc6, IDH_PRINT_CHOOSE_PRINTER,
cmb1, IDH_PRINT_CHOOSE_PRINTER,
psh2, IDH_PRINT_PROPERTIES,
stc8, IDH_PRINT_SETUP_DETAILS,
stc12, IDH_PRINT_SETUP_DETAILS,
stc7, IDH_PRINT_SETUP_DETAILS,
stc11, IDH_PRINT_SETUP_DETAILS,
stc10, IDH_PRINT_SETUP_DETAILS,
stc14, IDH_PRINT_SETUP_DETAILS,
stc9, IDH_PRINT_SETUP_DETAILS,
stc13, IDH_PRINT_SETUP_DETAILS,
grp2, IDH_COMM_GROUPBOX,
stc2, IDH_PAGE_PAPER_SIZE,
cmb2, IDH_PAGE_PAPER_SIZE,
stc3, IDH_PAGE_PAPER_SOURCE,
cmb3, IDH_PAGE_PAPER_SOURCE,
grp1, IDH_PRINT_SETUP_ORIENT,
ico1, IDH_PRINT_SETUP_ORIENT,
rad1, IDH_PRINT_SETUP_ORIENT,
rad2, IDH_PRINT_SETUP_ORIENT,
// for win3.1 PrintSetup template
grp3, IDH_PRINT_CHOOSE_PRINTER,
stc1, IDH_PRINT_CHOOSE_PRINTER,
rad3, IDH_PRINT_CHOOSE_PRINTER,
rad4, IDH_PRINT_CHOOSE_PRINTER,
cmb1, IDH_PRINT_CHOOSE_PRINTER,
psh1, IDH_PRINT_PROPERTIES,
psh14, IDH_PRINT_NETWORK,
psh15, IDH_HELP,
// for winNT PrintSetup template
grp2, IDH_PRINT_SETUP_DUPLEX, // grp2 used for win31 help
ico2, IDH_PRINT_SETUP_DUPLEX,
rad5, IDH_PRINT_SETUP_DUPLEX,
rad6, IDH_PRINT_SETUP_DUPLEX,
rad7, IDH_PRINT_SETUP_DUPLEX,
0, 0
};
const static DWORD aPageSetupHelpIDs[] = // Context Help IDs
{
rct1, IDH_PAGE_SAMPLE,
rct2, IDH_PAGE_SAMPLE,
rct3, IDH_PAGE_SAMPLE,
grp2, IDH_COMM_GROUPBOX,
stc2, IDH_PAGE_PAPER_SIZE,
cmb2, IDH_PAGE_PAPER_SIZE,
stc3, IDH_PAGE_PAPER_SOURCE,
cmb3, IDH_PAGE_PAPER_SOURCE,
grp1, IDH_PAGE_ORIENTATION,
rad1, IDH_PAGE_ORIENTATION,
rad2, IDH_PAGE_ORIENTATION,
grp4, IDH_PAGE_MARGINS,
stc15, IDH_PAGE_MARGINS,
edt4, IDH_PAGE_MARGINS,
stc16, IDH_PAGE_MARGINS,
edt6, IDH_PAGE_MARGINS,
stc17, IDH_PAGE_MARGINS,
edt5, IDH_PAGE_MARGINS,
stc18, IDH_PAGE_MARGINS,
edt7, IDH_PAGE_MARGINS,
psh3, IDH_PAGE_PRINTER,
psh14, IDH_PRINT_NETWORK,
psh15, IDH_HELP,
0, 0
};
#pragma data_seg()
// Macro Definitions.
#define IS_KEY_PRESSED(key) ( GetKeyState(key) & 0x8000 )
// Function Prototypes.
BOOL
PrintDlgX(
PPRINTINFO pPI);
BOOL
PageSetupDlgX(
PPRINTINFO pPI);
BOOL
PrintLoadLibraries();
VOID
PrintUnloadLibraries();
BOOL
PrintLoadIcons();
int
PrintDisplayPrintDlg(
PPRINTINFO pPI);
int
PrintDisplaySetupDlg(
PPRINTINFO pPI);
BOOL
PrintDlgProc(
HWND hDlg,
UINT wMsg,
WPARAM wParam,
LONG lParam);
BOOL
PrintSetupDlgProc(
HWND hDlg,
UINT wMsg,
WPARAM wParam,
LONG lParam);
LONG
PrintEditNumberOnlyProc(
HWND hWnd,
UINT msg,
WPARAM wP,
LPARAM lP);
LONG
PrintEditMarginProc(
HWND hWnd,
UINT msg,
WPARAM wP,
LPARAM lP);
LONG
PrintPageSetupPaintProc(
HWND hWnd,
UINT msg,
WPARAM wP,
LPARAM lP);
HANDLE
PrintLoadResource(
HANDLE hInst,
LPTSTR pResName,
LPTSTR pType);
VOID
PrintGetDefaultPrinterName(
PPRINTINFO pPI);
BOOL
PrintReturnDefault(
PPRINTINFO pPI);
BOOL
PrintInitGeneral(
HWND hDlg,
UINT Id,
PPRINTINFO pPI);
DWORD
PrintInitPrintDlg(
HWND hDlg,
WPARAM wParam,
PPRINTINFO pPI);
DWORD
PrintInitSetupDlg(
HWND hDlg,
WPARAM wParam,
PPRINTINFO pPI);
VOID
PrintUpdateSetupDlg(
HWND hDlg,
PPRINTINFO pPI,
LPDEVMODE pDM,
BOOL fResetContent);
BOOL
PrintSetCopies(
HWND hDlg,
PPRINTINFO pPI,
UINT Id);
VOID
PrintSetMinMargins(
HWND hDlg,
PPRINTINFO pPI,
LPDEVMODE pDM);
VOID
PrintSetupMargins(
HWND hDlg,
PPRINTINFO pPI);
VOID
PrintSetMargin(
HWND hDlg,
PPRINTINFO pPI,
UINT Id,
LONG lValue);
VOID
PrintGetMargin(
HWND hEdt,
PPRINTINFO pPI,
LONG lMin,
LONG *plMargin,
LONG *plSample);
BOOL
PrintInitBannerAndQuality(
HWND hDlg,
PPRINTINFO pPI,
LPPRINTDLG pPD);
BOOL
PrintCreateBanner(
HWND hDlg,
LPDEVNAMES pDN,
LPTSTR psBanner,
UINT cchBanner);
VOID
PrintInitQuality(
HANDLE hCmb,
LPPRINTDLG pPD,
SHORT nQuality);
VOID
PrintChangeProperties(
HWND hDlg,
UINT Id,
PPRINTINFO pPI);
VOID
PrintPrinterChanged(
HWND hDlg,
UINT Id,
PPRINTINFO pPI);
VOID
PrintUpdateStatus(
HWND hDlg,
PPRINTINFO pPI);
BOOL
PrintGetSetupInfo(
HWND hDlg,
LPPRINTDLG pPD);
VOID
PrintSearchForPrinter(
PPRINTINFO pPI,
LPCTSTR lpsPrinterName);
#ifdef UNICODE
VOID
PrintGetExtDeviceMode(
HWND hDlg,
PPRINTINFO pPI);
#endif
BOOL
PrintEnumAndSelect(
HWND hDlg,
UINT Id,
PPRINTINFO pPI,
LPTSTR lpsPrinterToSelect,
BOOL bEnumPrinters);
VOID
PrintBuildDevNames(
PPRINTINFO pPI);
HANDLE
PrintGetDevMode(
HWND hDlg,
HANDLE hPrinter,
LPTSTR lpsDeviceName,
HANDLE hDevMode);
VOID
PrintReturnICDC(
LPPRINTDLG pPD,
LPDEVNAMES pDN,
LPDEVMODE pDM);
VOID
PrintMeasureItem(
HANDLE hDlg,
LPMEASUREITEMSTRUCT mis);
VOID
PrintInitOrientation(
HWND hDlg,
PPRINTINFO pPI,
LPDEVMODE pDM);
VOID
PrintSetOrientation(
HWND hDlg,
PPRINTINFO pPI,
LPDEVMODE pDM,
UINT uiOldId,
UINT uiNewId);
VOID
PrintInitDuplex(
HWND hDlg,
LPDEVMODE pDM);
VOID
PrintSetDuplex(
HWND hDlg,
LPDEVMODE pDM,
UINT nRad);
VOID
PrintInitPaperCombo(
PPRINTINFO pPI,
HWND hCmb,
HWND hStc,
PRINTER_INFO_2 *pPrinter,
LPDEVMODE pDM,
WORD fwCap1,
WORD cchSize1,
WORD fwCap2);
VOID
PrintEditError(
HWND hDlg,
int Id,
UINT MessageId,
...);
VOID
PrintOpenPrinter(
PPRINTINFO pPI,
LPTSTR pPrinterName);
BOOL
PrintClosePrinters(
PPRINTINFO pPI);
#ifdef UNICODE
VOID
UpdateSpoolerInfo(
PPRINTINFO pPI);
#endif
LPPRINTER_INFO_2
PrintGetPrinterInfo2(
HANDLE hPrinter);
int
ConvertStringToInteger(
LPCTSTR pSrc);
VOID
FreePrinterArray(
PPRINTINFO pPI);
VOID
TermPrint(void);
VOID
TransferPSD2PD(
PPRINTINFO pPI);
VOID
TransferPD2PSD(
PPRINTINFO pPI);
#ifdef UNICODE
VOID
TransferPSD2PDA(
PPRINTINFO pPI);
VOID
TransferPDA2PSD(
PPRINTINFO pPI);
BOOL
ThunkPageSetupDlg(
PPRINTINFO pPI,
LPPAGESETUPDLGA pPSDA);
VOID
FreeThunkPageSetupDlg(
PPRINTINFO pPI);
BOOL
ThunkPrintDlg(
PPRINTINFO pPI,
LPPRINTDLGA pPDA);
VOID
FreeThunkPrintDlg(
PPRINTINFO pPI);
VOID
ThunkPrintDlgA2W(
PPRINTINFO pPI);
VOID
ThunkPrintDlgW2A(
PPRINTINFO pPI);
VOID
ThunkDevNamesA2W(
LPDEVNAMES pDNA,
LPDEVNAMES pDNW);
VOID
ThunkDevNamesW2A(
LPDEVNAMES pDNW,
LPDEVNAMES pDNA);
VOID
ThunkDevModeA2W(
LPDEVMODEA pDMA,
LPDEVMODEW pDMW);
VOID
ThunkDevModeW2A(
LPDEVMODEW pDMW,
LPDEVMODEA pDMA);
LPDEVMODEW
AllocateUnicodeDevMode(
LPDEVMODEA pANSIDevMode);
LPDEVMODEA
AllocateAnsiDevMode(
LPDEVMODEW pUnicodeDevMode);
#endif