Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

798 lines
16 KiB

  1. /*++
  2. Copyright (c) 1990-1998, Microsoft Corporation All rights reserved.
  3. Module Name:
  4. prnsetup.h
  5. Abstract:
  6. This module contains the header information for the Win32 print dialogs.
  7. Revision History:
  8. --*/
  9. //
  10. // Include Files.
  11. //
  12. #include <help.h>
  13. //
  14. // Constant Declarations.
  15. //
  16. #ifndef WINNT
  17. #define COMDLG_ANSI 0x0
  18. #define COMDLG_WIDE 0x1
  19. #endif
  20. #define PI_PRINTERS_ENUMERATED 0x00000001
  21. #define PI_COLLATE_REQUESTED 0x00000002
  22. #define PI_WPAPER_ENVELOPE 0x00000004 // wPaper is DMPAPER_ENV_x
  23. #define PI_PRINTDLGX_RECURSE 0x00000008 // PrintDlgX calls PrintDlgX
  24. #define PRNPROP (LPCTSTR) 0xA000L
  25. #define MMS_PER_INCH 254 // 25.4 mms/inch
  26. #define INCHES_DEFAULT 1000
  27. #define MMS_DEFAULT 2500
  28. #define COPIES_EDIT_SIZE 4
  29. #define PAGE_EDIT_SIZE 5
  30. #define MARGIN_EDIT_SIZE 6
  31. #define CCHPAPERNAME 64
  32. #define CCHBINNAME 24
  33. #define ROTATE_LEFT 270 // dot-matrix
  34. #define ROTATE_RIGHT 90 // HP PCL
  35. #define MAX_DEV_SECT 512
  36. #define BACKSPACE 0x08
  37. #define CTRL_X_CUT 0x18
  38. #define CTRL_C_COPY 0x03
  39. #define CTRL_V_PASTE 0x16
  40. #define SIZEOF_DEVICE_INFO 32
  41. #define MAX_PRINTERNAME (MAX_PATH * 2)
  42. #define SCRATCHBUF_SIZE 256
  43. #define MIN_DEVMODE_SIZEA 40 // from spooler\inc\splcom.h
  44. #define MAX_COPIES 9999
  45. #define IDC_COPIES_UDARROW 9999
  46. //
  47. // Constant Declarations for DLG file.
  48. //
  49. #define ID_BOTH_P_PROPERTIES psh2
  50. #define ID_BOTH_P_NETWORK psh14
  51. #define ID_BOTH_P_HELP pshHelp
  52. #define ID_BOTH_S_PRINTER stc6
  53. #define ID_BOTH_S_STATUS stc12
  54. #define ID_BOTH_S_TYPE stc11
  55. #define ID_BOTH_S_WHERE stc14
  56. #define ID_BOTH_S_COMMENT stc13
  57. #define ID_PRINT_X_TOFILE chx1
  58. #define ID_PRINT_X_COLLATE chx2
  59. #define ID_PRINT_C_QUALITY cmb1
  60. #define ID_PRINT_C_NAME cmb4
  61. #define ID_PRINT_E_FROM edt1
  62. #define ID_PRINT_E_TO edt2
  63. #define ID_PRINT_E_COPIES edt3
  64. #define ID_PRINT_G_RANGE grp1
  65. #define ID_PRINT_G_COPIES grp2
  66. #define ID_PRINT_G_PRINTER grp4
  67. #define ID_PRINT_I_COLLATE ico3
  68. #define ID_PRINT_P_SETUP psh1
  69. #define ID_PRINT_R_ALL rad1
  70. #define ID_PRINT_R_SELECTION rad2
  71. #define ID_PRINT_R_PAGES rad3
  72. #define ID_PRINT_S_DEFAULT stc1
  73. #define ID_PRINT_S_FROM stc2
  74. #define ID_PRINT_S_TO stc3
  75. #define ID_PRINT_S_QUALITY stc4
  76. #define ID_PRINT_S_COPIES stc5
  77. #define ID_SETUP_C_NAME cmb1
  78. #define ID_SETUP_C_SIZE cmb2
  79. #define ID_SETUP_C_SOURCE cmb3
  80. #define ID_SETUP_E_LEFT edt4
  81. #define ID_SETUP_E_TOP edt5
  82. #define ID_SETUP_E_RIGHT edt6
  83. #define ID_SETUP_E_BOTTOM edt7
  84. #define ID_SETUP_G_ORIENTATION grp1
  85. #define ID_SETUP_G_PAPER grp2
  86. #define ID_SETUP_G_DUPLEX grp3
  87. #define ID_SETUP_G_MARGINS grp4
  88. #define ID_SETUP_I_ORIENTATION ico1
  89. #define ID_SETUP_I_DUPLEX ico2
  90. #define ID_SETUP_P_MORE psh1
  91. #define ID_SETUP_P_PRINTER psh3
  92. #define ID_SETUP_R_PORTRAIT rad1
  93. #define ID_SETUP_R_LANDSCAPE rad2
  94. #define ID_SETUP_R_DEFAULT rad3
  95. #define ID_SETUP_R_SPECIFIC rad4
  96. #define ID_SETUP_R_NONE rad5
  97. #define ID_SETUP_R_LONG rad6
  98. #define ID_SETUP_R_SHORT rad7
  99. #define ID_SETUP_S_DEFAULT stc1
  100. #define ID_SETUP_S_SIZE stc2
  101. #define ID_SETUP_S_SOURCE stc3
  102. #define ID_SETUP_S_LEFT stc15
  103. #define ID_SETUP_S_RIGHT stc16
  104. #define ID_SETUP_S_TOP stc17
  105. #define ID_SETUP_S_BOTTOM stc18
  106. #define ID_SETUP_W_SAMPLE rct1
  107. #define ID_SETUP_W_SHADOWRIGHT rct2
  108. #define ID_SETUP_W_SHADOWBOTTOM rct3
  109. //
  110. // Typedef Declarations.
  111. //
  112. typedef struct {
  113. UINT ApiType;
  114. LPPRINTDLG pPD;
  115. LPPAGESETUPDLG pPSD;
  116. DWORD cPrinters;
  117. PPRINTER_INFO_2 pPrinters;
  118. PPRINTER_INFO_2 pCurPrinter;
  119. HANDLE hCurPrinter;
  120. DWORD Status;
  121. TCHAR szDefaultPrinter[MAX_PRINTERNAME];
  122. WORD wPaper;
  123. DWORD dwRotation;
  124. UINT uiOrientationID;
  125. POINT PtPaperSizeMMs;
  126. RECT RtMinMarginMMs;
  127. RECT RtMarginMMs;
  128. POINT PtMargins;
  129. RECT RtSampleXYWH;
  130. BOOL bKillFocus;
  131. DWORD ProcessVersion;
  132. #ifdef UNICODE
  133. LPPRINTDLGA pPDA;
  134. LPBOOL pAllocInfo;
  135. BOOL bUseExtDeviceMode;
  136. BOOL fPrintTemplateAlloc;
  137. BOOL fSetupTemplateAlloc;
  138. UINT NestCtr;
  139. #endif
  140. } PRINTINFO, *PPRINTINFO;
  141. //
  142. // Global Variables.
  143. //
  144. #ifndef WINNT
  145. UINT msgHELPA;
  146. #endif
  147. #ifndef WINNT
  148. typedef DWORD (WINAPI *LPFNWNETCONNECTIONDIALOG)(HWND, DWORD);
  149. LPFNWNETCONNECTIONDIALOG MPR_WNetConnectionDialog = NULL;
  150. CHAR szWNetConnectionDialog[] = "WNetConnectionDialog";
  151. #endif
  152. static TCHAR szTextWindows[] = TEXT("Windows");
  153. static TCHAR szTextDevices[] = TEXT("devices");
  154. static TCHAR szTextDevice[] = TEXT("device");
  155. static TCHAR szTextNull[] = TEXT("");
  156. static TCHAR szFilePort[] = TEXT("FILE:");
  157. static TCHAR szDriver[] = TEXT("winspool");
  158. #ifndef WINNT
  159. static TCHAR szCommdlgHelp[] = HELPMSGSTRING;
  160. #endif
  161. LPPRINTHOOKPROC glpfnPrintHook = NULL;
  162. LPSETUPHOOKPROC glpfnSetupHook = NULL;
  163. #ifdef WINNT
  164. WNDPROC lpEditNumOnlyProc = NULL;
  165. #endif
  166. WNDPROC lpEditMarginProc = NULL;
  167. WNDPROC lpStaticProc = NULL;
  168. HKEY hPrinterKey;
  169. TCHAR *szRegistryPrinter = TEXT("Printers");
  170. TCHAR *szRegistryDefaultValueName = TEXT("Default");
  171. #ifndef WINNT
  172. HANDLE hMPR = NULL;
  173. TCHAR szMprDll[] = TEXT("mpr.dll");
  174. #endif
  175. static BOOL bAllIconsLoaded = FALSE; // if all icons/images loaded
  176. static HANDLE hIconCollate = NULL; // Image
  177. static HANDLE hIconNoCollate = NULL; // Image
  178. static HICON hIconPortrait = NULL; // Icon
  179. static HICON hIconLandscape = NULL; // Icon
  180. static HICON hIconPDuplexNone = NULL; // Icon
  181. static HICON hIconLDuplexNone = NULL; // Icon
  182. static HICON hIconPDuplexTumble = NULL; // Icon
  183. static HICON hIconLDuplexTumble = NULL; // Icon
  184. static HICON hIconPDuplexNoTumble = NULL; // Icon
  185. static HICON hIconLDuplexNoTumble = NULL; // Icon
  186. static HICON hIconPSStampP = NULL; // Icon
  187. static HICON hIconPSStampL = NULL; // Icon
  188. static TCHAR cIntlDecimal = CHAR_NULL; // decimal separator (.)
  189. static TCHAR cIntlMeasure[5] = TEXT(""); // measurement designator ("/mm)
  190. static int cchIntlMeasure = 0; // # of chars in cIntlMeasure
  191. static TCHAR szDefaultSrc[SCRATCHBUF_SIZE] = TEXT("");
  192. //
  193. // Context Help IDs.
  194. //
  195. const static DWORD aPrintHelpIDs[] = // Context Help IDs
  196. {
  197. // for Print dialog
  198. grp4, NO_HELP,
  199. stc6, IDH_PRINT_CHOOSE_PRINTER,
  200. cmb4, IDH_PRINT_CHOOSE_PRINTER,
  201. psh2, IDH_PRINT_PROPERTIES,
  202. stc8, IDH_PRINT_SETUP_DETAILS,
  203. stc12, IDH_PRINT_SETUP_DETAILS,
  204. stc7, IDH_PRINT_SETUP_DETAILS,
  205. stc11, IDH_PRINT_SETUP_DETAILS,
  206. stc10, IDH_PRINT_SETUP_DETAILS,
  207. stc14, IDH_PRINT_SETUP_DETAILS,
  208. stc9, IDH_PRINT_SETUP_DETAILS,
  209. stc13, IDH_PRINT_SETUP_DETAILS,
  210. chx1, IDH_PRINT_TO_FILE,
  211. grp1, NO_HELP,
  212. ico1, IDH_PRINT32_RANGE,
  213. rad1, IDH_PRINT32_RANGE,
  214. rad2, IDH_PRINT32_RANGE,
  215. rad3, IDH_PRINT32_RANGE,
  216. stc2, IDH_PRINT32_RANGE,
  217. edt1, IDH_PRINT32_RANGE,
  218. stc3, IDH_PRINT32_RANGE,
  219. edt2, IDH_PRINT32_RANGE,
  220. grp2, NO_HELP,
  221. edt3, IDH_PRINT_COPIES,
  222. ico3, IDH_PRINT_COLLATE,
  223. chx2, IDH_PRINT_COLLATE,
  224. // for win3.1 Print template
  225. stc1, IDH_PRINT_SETUP_DETAILS,
  226. stc4, IDH_PRINT_QUALITY,
  227. cmb1, IDH_PRINT_QUALITY,
  228. stc5, IDH_PRINT_COPIES,
  229. psh1, IDH_PRINT_PRINTER_SETUP,
  230. psh14, IDH_PRINT_NETWORK,
  231. pshHelp, IDH_HELP,
  232. 0, 0
  233. };
  234. const static DWORD aPrintSetupHelpIDs[] = // Context Help IDs
  235. {
  236. // for PrintSetup dialog
  237. grp4, NO_HELP,
  238. stc6, IDH_PRINT_CHOOSE_PRINTER,
  239. cmb1, IDH_PRINT_CHOOSE_PRINTER,
  240. psh2, IDH_PRINT_PROPERTIES,
  241. stc8, IDH_PRINT_SETUP_DETAILS,
  242. stc12, IDH_PRINT_SETUP_DETAILS,
  243. stc7, IDH_PRINT_SETUP_DETAILS,
  244. stc11, IDH_PRINT_SETUP_DETAILS,
  245. stc10, IDH_PRINT_SETUP_DETAILS,
  246. stc14, IDH_PRINT_SETUP_DETAILS,
  247. stc9, IDH_PRINT_SETUP_DETAILS,
  248. stc13, IDH_PRINT_SETUP_DETAILS,
  249. grp2, NO_HELP,
  250. stc2, IDH_PAGE_PAPER_SIZE,
  251. cmb2, IDH_PAGE_PAPER_SIZE,
  252. stc3, IDH_PAGE_PAPER_SOURCE,
  253. cmb3, IDH_PAGE_PAPER_SOURCE,
  254. grp1, NO_HELP,
  255. ico1, IDH_PRINT_SETUP_ORIENT,
  256. rad1, IDH_PRINT_SETUP_ORIENT,
  257. rad2, IDH_PRINT_SETUP_ORIENT,
  258. // for win3.1 PrintSetup template
  259. grp3, NO_HELP,
  260. stc1, IDH_PRINT_CHOOSE_PRINTER,
  261. rad3, IDH_PRINT_CHOOSE_PRINTER,
  262. rad4, IDH_PRINT_CHOOSE_PRINTER,
  263. cmb1, IDH_PRINT_CHOOSE_PRINTER,
  264. psh1, IDH_PRINT_PROPERTIES,
  265. psh14, IDH_PRINT_NETWORK,
  266. pshHelp, IDH_HELP,
  267. // for winNT PrintSetup template
  268. grp2, NO_HELP, // grp2 used for win31 help
  269. ico2, IDH_PRINT_SETUP_DUPLEX,
  270. rad5, IDH_PRINT_SETUP_DUPLEX,
  271. rad6, IDH_PRINT_SETUP_DUPLEX,
  272. rad7, IDH_PRINT_SETUP_DUPLEX,
  273. 0, 0
  274. };
  275. const static DWORD aPageSetupHelpIDs[] = // Context Help IDs
  276. {
  277. rct1, IDH_PAGE_SAMPLE,
  278. rct2, IDH_PAGE_SAMPLE,
  279. rct3, IDH_PAGE_SAMPLE,
  280. grp2, NO_HELP,
  281. stc2, IDH_PAGE_PAPER_SIZE,
  282. cmb2, IDH_PAGE_PAPER_SIZE,
  283. stc3, IDH_PAGE_PAPER_SOURCE,
  284. cmb3, IDH_PAGE_PAPER_SOURCE,
  285. grp1, NO_HELP,
  286. rad1, IDH_PAGE_ORIENTATION,
  287. rad2, IDH_PAGE_ORIENTATION,
  288. grp4, NO_HELP,
  289. stc15, IDH_PAGE_MARGINS,
  290. edt4, IDH_PAGE_MARGINS,
  291. stc16, IDH_PAGE_MARGINS,
  292. edt6, IDH_PAGE_MARGINS,
  293. stc17, IDH_PAGE_MARGINS,
  294. edt5, IDH_PAGE_MARGINS,
  295. stc18, IDH_PAGE_MARGINS,
  296. edt7, IDH_PAGE_MARGINS,
  297. psh3, IDH_PAGE_PRINTER,
  298. psh14, IDH_PRINT_NETWORK,
  299. pshHelp, IDH_HELP,
  300. 0, 0
  301. };
  302. //
  303. // Macro Definitions.
  304. //
  305. #define IS_KEY_PRESSED(key) ( GetKeyState(key) & 0x8000 )
  306. #define ISDIGIT(c) ((c) >= TEXT('0') && (c) <= TEXT('9'))
  307. //
  308. // SetField is used to modify new-for-ver-4.0 DEVMODE fields.
  309. // We don't have to worry about the GET case, because we always check for
  310. // the existance-of-field bit before looking at the field.
  311. //
  312. #define SetField(_pdm, _fld, _val) \
  313. ((_pdm)->dmSpecVersion >= 0x0400 ? (((_pdm)->_fld = (_val)), TRUE) : FALSE)
  314. #ifdef __cplusplus
  315. extern "C" {
  316. #endif
  317. //
  318. // Function Prototypes.
  319. //
  320. BOOL
  321. PrintDlgX(
  322. PPRINTINFO pPI);
  323. BOOL
  324. PageSetupDlgX(
  325. PPRINTINFO pPI);
  326. BOOL
  327. PrintLoadIcons();
  328. int
  329. PrintDisplayPrintDlg(
  330. PPRINTINFO pPI);
  331. int
  332. PrintDisplaySetupDlg(
  333. PPRINTINFO pPI);
  334. BOOL_PTR CALLBACK
  335. PrintDlgProc(
  336. HWND hDlg,
  337. UINT wMsg,
  338. WPARAM wParam,
  339. LPARAM lParam);
  340. BOOL_PTR CALLBACK
  341. PrintSetupDlgProc(
  342. HWND hDlg,
  343. UINT wMsg,
  344. WPARAM wParam,
  345. LPARAM lParam);
  346. LRESULT
  347. PrintEditNumberOnlyProc(
  348. HWND hWnd,
  349. UINT msg,
  350. WPARAM wP,
  351. LPARAM lP);
  352. LRESULT
  353. PrintEditMarginProc(
  354. HWND hWnd,
  355. UINT msg,
  356. WPARAM wP,
  357. LPARAM lP);
  358. LRESULT
  359. PrintPageSetupPaintProc(
  360. HWND hWnd,
  361. UINT msg,
  362. WPARAM wP,
  363. LPARAM lP);
  364. HANDLE
  365. PrintLoadResource(
  366. HANDLE hInst,
  367. LPTSTR pResName,
  368. LPTSTR pType);
  369. VOID
  370. PrintGetDefaultPrinterName(
  371. LPTSTR pDefaultPrinter,
  372. UINT cchSize);
  373. BOOL
  374. PrintReturnDefault(
  375. PPRINTINFO pPI);
  376. BOOL
  377. PrintInitGeneral(
  378. HWND hDlg,
  379. UINT Id,
  380. PPRINTINFO pPI);
  381. DWORD
  382. PrintInitPrintDlg(
  383. HWND hDlg,
  384. WPARAM wParam,
  385. PPRINTINFO pPI);
  386. DWORD
  387. PrintInitSetupDlg(
  388. HWND hDlg,
  389. WPARAM wParam,
  390. PPRINTINFO pPI);
  391. VOID
  392. PrintUpdateSetupDlg(
  393. HWND hDlg,
  394. PPRINTINFO pPI,
  395. LPDEVMODE pDM,
  396. BOOL fResetContent);
  397. BOOL
  398. PrintSetCopies(
  399. HWND hDlg,
  400. PPRINTINFO pPI,
  401. UINT Id);
  402. VOID
  403. PrintSetMinMargins(
  404. HWND hDlg,
  405. PPRINTINFO pPI,
  406. LPDEVMODE pDM);
  407. VOID
  408. PrintSetupMargins(
  409. HWND hDlg,
  410. PPRINTINFO pPI);
  411. VOID
  412. PrintSetMargin(
  413. HWND hDlg,
  414. PPRINTINFO pPI,
  415. UINT Id,
  416. LONG lValue);
  417. VOID
  418. PrintGetMargin(
  419. HWND hEdt,
  420. PPRINTINFO pPI,
  421. LONG lMin,
  422. LONG *plMargin,
  423. LONG *plSample);
  424. BOOL
  425. PrintInitBannerAndQuality(
  426. HWND hDlg,
  427. PPRINTINFO pPI,
  428. LPPRINTDLG pPD);
  429. BOOL
  430. PrintCreateBanner(
  431. HWND hDlg,
  432. LPDEVNAMES pDN,
  433. LPTSTR psBanner,
  434. UINT cchBanner);
  435. VOID
  436. PrintInitQuality(
  437. HANDLE hCmb,
  438. LPPRINTDLG pPD,
  439. SHORT nQuality);
  440. VOID
  441. PrintChangeProperties(
  442. HWND hDlg,
  443. UINT Id,
  444. PPRINTINFO pPI);
  445. VOID
  446. PrintPrinterChanged(
  447. HWND hDlg,
  448. UINT Id,
  449. PPRINTINFO pPI);
  450. VOID
  451. PrintCancelPrinterChanged(
  452. PPRINTINFO pPI,
  453. LPTSTR pPrinterName);
  454. VOID
  455. PrintUpdateStatus(
  456. HWND hDlg,
  457. PPRINTINFO pPI);
  458. BOOL
  459. PrintGetSetupInfo(
  460. HWND hDlg,
  461. LPPRINTDLG pPD);
  462. PPRINTER_INFO_2
  463. PrintSearchForPrinter(
  464. PPRINTINFO pPI,
  465. LPCTSTR lpsPrinterName);
  466. #ifdef UNICODE
  467. VOID
  468. PrintGetExtDeviceMode(
  469. HWND hDlg,
  470. PPRINTINFO pPI);
  471. #endif
  472. BOOL
  473. PrintEnumAndSelect(
  474. HWND hDlg,
  475. UINT Id,
  476. PPRINTINFO pPI,
  477. LPTSTR lpsPrinterToSelect,
  478. BOOL bEnumPrinters);
  479. VOID
  480. PrintBuildDevNames(
  481. PPRINTINFO pPI);
  482. HANDLE
  483. PrintGetDevMode(
  484. HWND hDlg,
  485. HANDLE hPrinter,
  486. LPTSTR lpsDeviceName,
  487. HANDLE hDevMode);
  488. VOID
  489. PrintReturnICDC(
  490. LPPRINTDLG pPD,
  491. LPDEVNAMES pDN,
  492. LPDEVMODE pDM);
  493. VOID
  494. PrintMeasureItem(
  495. HANDLE hDlg,
  496. LPMEASUREITEMSTRUCT mis);
  497. VOID
  498. PrintInitOrientation(
  499. HWND hDlg,
  500. PPRINTINFO pPI,
  501. LPDEVMODE pDM);
  502. VOID
  503. PrintSetOrientation(
  504. HWND hDlg,
  505. PPRINTINFO pPI,
  506. LPDEVMODE pDM,
  507. UINT uiOldId,
  508. UINT uiNewId);
  509. VOID
  510. PrintUpdatePageSetup(
  511. HWND hDlg,
  512. PPRINTINFO pPI,
  513. LPDEVMODE pDM,
  514. UINT uiOldId,
  515. UINT uiNewId);
  516. VOID
  517. PrintInitDuplex(
  518. HWND hDlg,
  519. LPDEVMODE pDM);
  520. VOID
  521. PrintSetDuplex(
  522. HWND hDlg,
  523. LPDEVMODE pDM,
  524. UINT nRad);
  525. VOID
  526. PrintInitPaperCombo(
  527. PPRINTINFO pPI,
  528. HWND hCmb,
  529. HWND hStc,
  530. PPRINTER_INFO_2 pPrinter,
  531. LPDEVMODE pDM,
  532. WORD fwCap1,
  533. WORD cchSize1,
  534. WORD fwCap2);
  535. VOID
  536. PrintEditError(
  537. HWND hDlg,
  538. int Id,
  539. UINT MessageId,
  540. ...);
  541. VOID
  542. PrintOpenPrinter(
  543. PPRINTINFO pPI,
  544. LPTSTR pPrinterName);
  545. BOOL
  546. PrintClosePrinters(
  547. PPRINTINFO pPI);
  548. VOID SetCopiesEditWidth(
  549. HWND hDlg,
  550. HWND hControl);
  551. #ifdef UNICODE
  552. VOID
  553. UpdateSpoolerInfo(
  554. PPRINTINFO pPI);
  555. #endif
  556. PPRINTER_INFO_2
  557. PrintGetPrinterInfo2(
  558. HANDLE hPrinter);
  559. int
  560. ConvertStringToInteger(
  561. LPCTSTR pSrc);
  562. VOID
  563. FreePrinterArray(
  564. PPRINTINFO pPI);
  565. VOID
  566. TermPrint(void);
  567. VOID
  568. TransferPSD2PD(
  569. PPRINTINFO pPI);
  570. VOID
  571. TransferPD2PSD(
  572. PPRINTINFO pPI);
  573. #ifdef UNICODE
  574. VOID
  575. TransferPSD2PDA(
  576. PPRINTINFO pPI);
  577. VOID
  578. TransferPDA2PSD(
  579. PPRINTINFO pPI);
  580. BOOL
  581. ThunkPageSetupDlg(
  582. PPRINTINFO pPI,
  583. LPPAGESETUPDLGA pPSDA);
  584. VOID
  585. FreeThunkPageSetupDlg(
  586. PPRINTINFO pPI);
  587. BOOL
  588. ThunkPrintDlg(
  589. PPRINTINFO pPI,
  590. LPPRINTDLGA pPDA);
  591. VOID
  592. FreeThunkPrintDlg(
  593. PPRINTINFO pPI);
  594. VOID
  595. ThunkPrintDlgA2W(
  596. PPRINTINFO pPI);
  597. VOID
  598. ThunkPrintDlgW2A(
  599. PPRINTINFO pPI);
  600. VOID
  601. ThunkDevModeA2W(
  602. LPDEVMODEA pDMA,
  603. LPDEVMODEW pDMW);
  604. VOID
  605. ThunkDevModeW2A(
  606. LPDEVMODEW pDMW,
  607. LPDEVMODEA pDMA);
  608. LPDEVMODEW
  609. AllocateUnicodeDevMode(
  610. LPDEVMODEA pANSIDevMode);
  611. LPDEVMODEA
  612. AllocateAnsiDevMode(
  613. LPDEVMODEW pUnicodeDevMode);
  614. WORD
  615. CountDigits(
  616. DWORD dwNumber);
  617. #endif
  618. #ifdef __cplusplus
  619. }; // extern "C"
  620. #endif