/*++ 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 // // 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