|
|
/*++
Copyright (c) 1990-1998, 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 <help.h>
//
// Constant Declarations.
//
#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 MMS_PER_INCH 254 // 25.4 mms/inch
#define INCHES_DEFAULT 1000
#define MMS_DEFAULT 2500
#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 0x08
#define CTRL_X_CUT 0x18
#define CTRL_C_COPY 0x03
#define CTRL_V_PASTE 0x16
#define SIZEOF_DEVICE_INFO 32
#define MAX_PRINTERNAME (MAX_PATH * 2)
#define SCRATCHBUF_SIZE 256
#define MIN_DEVMODE_SIZEA 40 // from spooler\inc\splcom.h
#define MAX_COPIES 9999
#define IDC_COPIES_UDARROW 9999
//
// Constant Declarations for DLG file.
//
#define ID_BOTH_P_PROPERTIES psh2
#define ID_BOTH_P_NETWORK psh14
#define ID_BOTH_P_HELP pshHelp
#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; PPRINTER_INFO_2 pPrinters; PPRINTER_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; LPPRINTDLGA pPDA; LPBOOL pAllocInfo; BOOL bUseExtDeviceMode; BOOL fPrintTemplateAlloc; BOOL fSetupTemplateAlloc; UINT NestCtr; } PRINTINFO, *PPRINTINFO;
//
// Global Variables.
//
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");
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");
static BOOL bAllIconsLoaded = FALSE; // if all icons/images loaded
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.
//
const static DWORD aPrintHelpIDs[] = // Context Help IDs
{ // for Print dialog
grp4, NO_HELP, 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, NO_HELP, 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, NO_HELP, 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, pshHelp, IDH_HELP,
0, 0 };
const static DWORD aPrintSetupHelpIDs[] = // Context Help IDs
{ // for PrintSetup dialog
grp4, NO_HELP, 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, NO_HELP, stc2, IDH_PAGE_PAPER_SIZE, cmb2, IDH_PAGE_PAPER_SIZE, stc3, IDH_PAGE_PAPER_SOURCE, cmb3, IDH_PAGE_PAPER_SOURCE,
grp1, NO_HELP, ico1, IDH_PRINT_SETUP_ORIENT, rad1, IDH_PRINT_SETUP_ORIENT, rad2, IDH_PRINT_SETUP_ORIENT,
// for win3.1 PrintSetup template
grp3, NO_HELP, 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, pshHelp, IDH_HELP,
// for winNT PrintSetup template
grp2, NO_HELP, // 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, NO_HELP, stc2, IDH_PAGE_PAPER_SIZE, cmb2, IDH_PAGE_PAPER_SIZE, stc3, IDH_PAGE_PAPER_SOURCE, cmb3, IDH_PAGE_PAPER_SOURCE,
grp1, NO_HELP, rad1, IDH_PAGE_ORIENTATION, rad2, IDH_PAGE_ORIENTATION,
grp4, NO_HELP, 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, pshHelp, IDH_HELP,
0, 0 };
//
// Macro Definitions.
//
#define IS_KEY_PRESSED(key) ( GetKeyState(key) & 0x8000 )
#define ISDIGIT(c) ((c) >= TEXT('0') && (c) <= TEXT('9'))
//
// SetField is used to modify new-for-ver-4.0 DEVMODE fields.
// We don't have to worry about the GET case, because we always check for
// the existance-of-field bit before looking at the field.
//
#define SetField(_pdm, _fld, _val) \
((_pdm)->dmSpecVersion >= 0x0400 ? (((_pdm)->_fld = (_val)), TRUE) : FALSE)
#ifdef __cplusplus
extern "C" { #endif
//
// Function Prototypes.
//
BOOL PrintDlgX( PPRINTINFO pPI);
BOOL PageSetupDlgX( PPRINTINFO pPI);
BOOL PrintLoadIcons();
int PrintDisplayPrintDlg( PPRINTINFO pPI);
int PrintDisplaySetupDlg( PPRINTINFO pPI);
BOOL_PTR CALLBACK PrintDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
BOOL_PTR CALLBACK PrintSetupDlgProc( HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
LRESULT PrintEditNumberOnlyProc( HWND hWnd, UINT msg, WPARAM wP, LPARAM lP);
LRESULT PrintEditMarginProc( HWND hWnd, UINT msg, WPARAM wP, LPARAM lP);
LRESULT PrintPageSetupPaintProc( HWND hWnd, UINT msg, WPARAM wP, LPARAM lP);
HANDLE PrintLoadResource( HANDLE hInst, LPTSTR pResName, LPTSTR pType);
VOID PrintGetDefaultPrinterName( LPTSTR pDefaultPrinter, UINT cchSize);
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 PrintCancelPrinterChanged( PPRINTINFO pPI, LPTSTR pPrinterName);
VOID PrintUpdateStatus( HWND hDlg, PPRINTINFO pPI);
BOOL PrintGetSetupInfo( HWND hDlg, LPPRINTDLG pPD);
PPRINTER_INFO_2 PrintSearchForPrinter( PPRINTINFO pPI, LPCTSTR lpsPrinterName);
VOID PrintGetExtDeviceMode( HWND hDlg, PPRINTINFO pPI);
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 PrintUpdatePageSetup( 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, PPRINTER_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);
VOID SetCopiesEditWidth( HWND hDlg, HWND hControl);
VOID UpdateSpoolerInfo( PPRINTINFO pPI);
PPRINTER_INFO_2 PrintGetPrinterInfo2( HANDLE hPrinter);
int ConvertStringToInteger( LPCTSTR pSrc);
VOID FreePrinterArray( PPRINTINFO pPI);
VOID TermPrint(void);
VOID TransferPSD2PD( PPRINTINFO pPI);
VOID TransferPD2PSD( PPRINTINFO pPI);
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 ThunkDevModeA2W( LPDEVMODEA pDMA, LPDEVMODEW pDMW);
VOID ThunkDevModeW2A( LPDEVMODEW pDMW, LPDEVMODEA pDMA);
LPDEVMODEW AllocateUnicodeDevMode( LPDEVMODEA pANSIDevMode);
LPDEVMODEA AllocateAnsiDevMode( LPDEVMODEW pUnicodeDevMode);
WORD CountDigits( DWORD dwNumber);
HRESULT ComboBoxGetLBText( IN HWND hComboBox, IN DWORD dwIndex, IN LPTSTR pszText, IN DWORD cchText);
#ifdef __cplusplus
}; // extern "C"
#endif
|