annotate foosdk/wtl/Include/atlprint.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLPRINT_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLPRINT_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atlprint.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #ifndef __ATLWIN_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 #error atlprint.h requires atlwin.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #include <winspool.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 // CPrinterInfo<t_nInfo>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 // CPrinterT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 // CDevModeT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 // CPrinterDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 // CPrintJobInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 // CPrintJob
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 // CPrintPreview
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 // CPrintPreviewWindowImpl<T, TBase, TWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 // CPrintPreviewWindow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 // CZoomPrintPreviewWindowImpl<T, TBase, TWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 // CZoomPrintPreviewWindow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 // CPrinterInfo - This class wraps all of the PRINTER_INFO_* structures
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // and provided by ::GetPrinter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 template <unsigned int t_nInfo>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 class _printer_info
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 typedef void infotype;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 template <> class _printer_info<1> { public: typedef PRINTER_INFO_1 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 template <> class _printer_info<2> { public: typedef PRINTER_INFO_2 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 template <> class _printer_info<3> { public: typedef PRINTER_INFO_3 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 template <> class _printer_info<4> { public: typedef PRINTER_INFO_4 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 template <> class _printer_info<5> { public: typedef PRINTER_INFO_5 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 template <> class _printer_info<6> { public: typedef PRINTER_INFO_6 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 template <> class _printer_info<7> { public: typedef PRINTER_INFO_7 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 template <> class _printer_info<8> { public: typedef PRINTER_INFO_8 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 template <> class _printer_info<9> { public: typedef PRINTER_INFO_9 infotype; };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 template <unsigned int t_nInfo>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 class CPrinterInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 typename _printer_info<t_nInfo>::infotype* m_pi;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 CPrinterInfo() : m_pi(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 CPrinterInfo(HANDLE hPrinter) : m_pi(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 GetPrinterInfo(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 ~CPrinterInfo()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 Cleanup();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 bool GetPrinterInfo(HANDLE hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 Cleanup();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 return GetPrinterInfoHelper(hPrinter, (BYTE**)&m_pi, t_nInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 void Cleanup()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 delete [] (BYTE*)m_pi;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 m_pi = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 static bool GetPrinterInfoHelper(HANDLE hPrinter, BYTE** pi, int nIndex)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 ATLASSERT(pi != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 DWORD dw = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 BYTE* pb = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 ::GetPrinter(hPrinter, nIndex, NULL, 0, &dw);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 if (dw > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 ATLTRY(pb = new BYTE[dw]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 if (pb != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 memset(pb, 0, dw);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 DWORD dwNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 if (!::GetPrinter(hPrinter, nIndex, pb, dw, &dwNew))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 delete [] pb;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 pb = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 *pi = pb;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 return (pb != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 // CPrinter - Wrapper class for a HANDLE to a printer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 class CPrinterT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 HANDLE m_hPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 CPrinterT(HANDLE hPrinter = NULL) : m_hPrinter(hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 ~CPrinterT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 CPrinterT& operator =(HANDLE hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 if (hPrinter != m_hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 m_hPrinter = hPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 bool IsNull() const { return (m_hPrinter == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 bool OpenPrinter(HANDLE hDevNames, const DEVMODE* pDevMode = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 bool b = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 DEVNAMES* pdn = (DEVNAMES*)::GlobalLock(hDevNames);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 if (pdn != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 LPTSTR lpszPrinterName = (LPTSTR)pdn + pdn->wDeviceOffset;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 b = OpenPrinter(lpszPrinterName, pDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 ::GlobalUnlock(hDevNames);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 return b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 bool OpenPrinter(LPCTSTR lpszPrinterName, const DEVMODE* pDevMode = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 ::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 return (m_hPrinter != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 bool OpenPrinter(LPCTSTR lpszPrinterName, PRINTER_DEFAULTS* pprintdefs)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 ::OpenPrinter((LPTSTR) lpszPrinterName, &m_hPrinter, pprintdefs);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 return (m_hPrinter != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 bool OpenDefaultPrinter(const DEVMODE* pDevMode = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 DWORD cchBuff = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 ::GetDefaultPrinter(NULL, &cchBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 TCHAR* pszBuff = new TCHAR[cchBuff];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 BOOL bRet = ::GetDefaultPrinter(pszBuff, &cchBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 if(bRet != FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 PRINTER_DEFAULTS pdefs = { NULL, (DEVMODE*)pDevMode, PRINTER_ACCESS_USE };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 ::OpenPrinter(pszBuff, &m_hPrinter, (pDevMode == NULL) ? NULL : &pdefs);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 delete [] pszBuff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 return m_hPrinter != NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 void ClosePrinter()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 if (m_hPrinter != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 if (t_bManaged)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 ::ClosePrinter(m_hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 m_hPrinter = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 bool PrinterProperties(HWND hWnd = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 if (hWnd == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 hWnd = ::GetActiveWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 return !!::PrinterProperties(hWnd, m_hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 HANDLE CopyToHDEVNAMES() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 HANDLE hDevNames = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 CPrinterInfo<5> pinfon5;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 CPrinterInfo<2> pinfon2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 LPTSTR lpszPrinterName = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 LPTSTR lpszPortName = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 // Some printers fail for PRINTER_INFO_5 in some situations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 if(pinfon5.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 lpszPrinterName = pinfon5.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 lpszPortName = pinfon5.m_pi->pPortName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 else if(pinfon2.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 lpszPrinterName = pinfon2.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 lpszPortName = pinfon2.m_pi->pPortName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 if(lpszPrinterName != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 int nLen = sizeof(DEVNAMES) + (lstrlen(lpszPrinterName) + 1 + lstrlen(lpszPortName) + 1) * sizeof(TCHAR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 hDevNames = ::GlobalAlloc(GMEM_MOVEABLE, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 BYTE* pv = (BYTE*)::GlobalLock(hDevNames);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 DEVNAMES* pdev = (DEVNAMES*)pv;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 if(pv != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 memset(pv, 0, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 pdev->wDeviceOffset = sizeof(DEVNAMES);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 pv = pv + sizeof(DEVNAMES); // now points to end
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 ATL::Checked::tcscpy_s((LPTSTR)pv, lstrlen(lpszPrinterName) + 1, lpszPrinterName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 pdev->wOutputOffset = (WORD)(sizeof(DEVNAMES) + (lstrlen(lpszPrinterName) + 1) * sizeof(TCHAR));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 pv = pv + (lstrlen(lpszPrinterName) + 1) * sizeof(TCHAR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 ATL::Checked::tcscpy_s((LPTSTR)pv, lstrlen(lpszPortName) + 1, lpszPortName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 ::GlobalUnlock(hDevNames);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 return hDevNames;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 HDC CreatePrinterDC(const DEVMODE* pdm = NULL) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 CPrinterInfo<5> pinfo5;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 CPrinterInfo<2> pinfo2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 HDC hDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 LPTSTR lpszPrinterName = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 // Some printers fail for PRINTER_INFO_5 in some situations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 if (pinfo5.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 lpszPrinterName = pinfo5.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 else if (pinfo2.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 lpszPrinterName = pinfo2.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 if (lpszPrinterName != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 hDC = ::CreateDC(NULL, lpszPrinterName, NULL, pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 return hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 HDC CreatePrinterIC(const DEVMODE* pdm = NULL) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 CPrinterInfo<5> pinfo5;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 CPrinterInfo<2> pinfo2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 HDC hDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 LPTSTR lpszPrinterName = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 // Some printers fail for PRINTER_INFO_5 in some situations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 if (pinfo5.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 lpszPrinterName = pinfo5.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 else if (pinfo2.GetPrinterInfo(m_hPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 lpszPrinterName = pinfo2.m_pi->pPrinterName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 if (lpszPrinterName != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 hDC = ::CreateIC(NULL, lpszPrinterName, NULL, pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 return hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 void Attach(HANDLE hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 ClosePrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 m_hPrinter = hPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 HANDLE Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 HANDLE hPrinter = m_hPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 m_hPrinter = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 return hPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 operator HANDLE() const { return m_hPrinter; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 typedef CPrinterT<false> CPrinterHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 typedef CPrinterT<true> CPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 // CDevMode - Wrapper class for DEVMODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 class CDevModeT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 HANDLE m_hDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 DEVMODE* m_pDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 CDevModeT(HANDLE hDevMode = NULL) : m_hDevMode(hDevMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 ~CDevModeT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 Cleanup();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 CDevModeT<t_bManaged>& operator =(HANDLE hDevMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 Attach(hDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 void Attach(HANDLE hDevModeNew)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 Cleanup();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 m_hDevMode = hDevModeNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 m_pDevMode = (m_hDevMode != NULL) ? (DEVMODE*)::GlobalLock(m_hDevMode) : NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 HANDLE Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 if (m_hDevMode != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 ::GlobalUnlock(m_hDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 HANDLE hDevMode = m_hDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 m_hDevMode = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 return hDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 bool IsNull() const { return (m_hDevMode == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 bool CopyFromPrinter(HANDLE hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 CPrinterInfo<2> pinfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 bool b = pinfo.GetPrinterInfo(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 if (b)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 b = CopyFromDEVMODE(pinfo.m_pi->pDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 return b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 bool CopyFromDEVMODE(const DEVMODE* pdm)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 if (pdm == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 int nSize = pdm->dmSize + pdm->dmDriverExtra;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 HANDLE h = ::GlobalAlloc(GMEM_MOVEABLE, nSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 if (h != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 void* p = ::GlobalLock(h);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 ATL::Checked::memcpy_s(p, nSize, pdm, nSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 ::GlobalUnlock(h);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 Attach(h);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 return (h != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 bool CopyFromHDEVMODE(HANDLE hdm)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 bool b = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 if (hdm != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 DEVMODE* pdm = (DEVMODE*)::GlobalLock(hdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 b = CopyFromDEVMODE(pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 ::GlobalUnlock(hdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 return b;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 HANDLE CopyToHDEVMODE()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 if ((m_hDevMode == NULL) || (m_pDevMode == NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 int nSize = m_pDevMode->dmSize + m_pDevMode->dmDriverExtra;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 HANDLE h = ::GlobalAlloc(GMEM_MOVEABLE, nSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 if (h != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 void* p = ::GlobalLock(h);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 ATL::Checked::memcpy_s(p, nSize, m_pDevMode, nSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 ::GlobalUnlock(h);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 return h;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 // If this devmode was for another printer, this will create a new devmode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 // based on the existing devmode, but retargeted at the new printer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 bool UpdateForNewPrinter(HANDLE hPrinter)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 bool bRet = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 LONG nLen = ::DocumentProperties(NULL, hPrinter, NULL, NULL, NULL, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 ATL::CTempBuffer<DEVMODE, _WTL_STACK_ALLOC_THRESHOLD> buff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 DEVMODE* pdm = buff.AllocateBytes(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 if(pdm != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 memset(pdm, 0, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 LONG l = ::DocumentProperties(NULL, hPrinter, NULL, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 if (l == IDOK)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 bRet = CopyFromDEVMODE(pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 bool DocumentProperties(HANDLE hPrinter, HWND hWnd = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 CPrinterInfo<1> pi;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 pi.GetPrinterInfo(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 if (hWnd == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 hWnd = ::GetActiveWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 bool bRet = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 LONG nLen = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, NULL, NULL, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 ATL::CTempBuffer<DEVMODE, _WTL_STACK_ALLOC_THRESHOLD> buff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 DEVMODE* pdm = buff.AllocateBytes(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 if(pdm != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 memset(pdm, 0, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 LONG l = ::DocumentProperties(hWnd, hPrinter, pi.m_pi->pName, pdm, m_pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER | DM_PROMPT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 if (l == IDOK)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 bRet = CopyFromDEVMODE(pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 operator HANDLE() const { return m_hDevMode; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 operator DEVMODE*() const { return m_pDevMode; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 void Cleanup()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 if (m_hDevMode != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 ::GlobalUnlock(m_hDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 if(t_bManaged)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 ::GlobalFree(m_hDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 m_hDevMode = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 typedef CDevModeT<false> CDevModeHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 typedef CDevModeT<true> CDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 // CPrinterDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 class CPrinterDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 // Constructors/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 CPrinterDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 CPrinter printer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 printer.OpenDefaultPrinter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 Attach(printer.CreatePrinterDC());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 CPrinterDC(HANDLE hPrinter, const DEVMODE* pdm = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 CPrinterHandle p;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 p.Attach(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 Attach(p.CreatePrinterDC(pdm));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 ~CPrinterDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 DeleteDC();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 // CPrintJob - Wraps a set of tasks for a specific printer (StartDoc/EndDoc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 // Handles aborting, background printing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 // Defines callbacks used by CPrintJob (not a COM interface)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 class ATL_NO_VTABLE IPrintJobInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 virtual void BeginPrintJob(HDC hDC) = 0; // allocate handles needed, etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 virtual void EndPrintJob(HDC hDC, bool bAborted) = 0; // free handles, etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 virtual void PrePrintPage(UINT nPage, HDC hDC) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 virtual bool PrintPage(UINT nPage, HDC hDC) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 virtual void PostPrintPage(UINT nPage, HDC hDC) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 // If you want per page devmodes, return the DEVMODE* to use for nPage.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 // You can optimize by only returning a new DEVMODE* when it is different
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 // from the one for nLastPage, otherwise return NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 // When nLastPage==0, the current DEVMODE* will be the default passed to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 // StartPrintJob.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 // Note: During print preview, nLastPage will always be "0".
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 virtual DEVMODE* GetNewDevModeForPage(UINT nLastPage, UINT nPage) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 virtual bool IsValidPage(UINT nPage) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 // Provides a default implementatin for IPrintJobInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 // Typically, MI'd into a document or view class
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 class ATL_NO_VTABLE CPrintJobInfo : public IPrintJobInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 virtual void BeginPrintJob(HDC /*hDC*/) // allocate handles needed, etc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 virtual void EndPrintJob(HDC /*hDC*/, bool /*bAborted*/) // free handles, etc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 virtual void PrePrintPage(UINT /*nPage*/, HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 m_nPJState = ::SaveDC(hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 virtual bool PrintPage(UINT /*nPage*/, HDC /*hDC*/) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 virtual void PostPrintPage(UINT /*nPage*/, HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 RestoreDC(hDC, m_nPJState);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 virtual DEVMODE* GetNewDevModeForPage(UINT /*nLastPage*/, UINT /*nPage*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 virtual bool IsValidPage(UINT /*nPage*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 // Implementation - data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 int m_nPJState;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 class CPrintJob
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 CPrinterHandle m_printer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 IPrintJobInfo* m_pInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 DEVMODE* m_pDefDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 DOCINFO m_docinfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 int m_nJobID;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 bool m_bCancel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 bool m_bComplete;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 unsigned long m_nStartPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 unsigned long m_nEndPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 CPrintJob() : m_nJobID(0), m_bCancel(false), m_bComplete(true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 ~CPrintJob()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 ATLASSERT(IsJobComplete()); // premature destruction?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 bool IsJobComplete() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 return m_bComplete;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 bool StartPrintJob(bool bBackground, HANDLE hPrinter, DEVMODE* pDefaultDevMode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 IPrintJobInfo* pInfo, LPCTSTR lpszDocName,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 unsigned long nStartPage, unsigned long nEndPage,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 bool bPrintToFile = false, LPCTSTR lpstrOutputFile = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 ATLASSERT(m_bComplete); // previous job not done yet?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 if (pInfo == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 memset(&m_docinfo, 0, sizeof(m_docinfo));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 m_docinfo.cbSize = sizeof(m_docinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 m_docinfo.lpszDocName = lpszDocName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 m_pInfo = pInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 m_nStartPage = nStartPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 m_nEndPage = nEndPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 m_printer.Attach(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 m_pDefDevMode = pDefaultDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 m_bComplete = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 if(bPrintToFile)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 m_docinfo.lpszOutput = (lpstrOutputFile != NULL) ? lpstrOutputFile : _T("FILE:");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 if (!bBackground)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 m_bComplete = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 return StartHelper();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 // Create a thread and return
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 DWORD dwThreadID = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 #ifdef _MT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, (UINT (WINAPI*)(void*))StartProc, this, 0, (UINT*)&dwThreadID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 HANDLE hThread = ::CreateThread(NULL, 0, StartProc, (void*)this, 0, &dwThreadID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 if (hThread == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 ::CloseHandle(hThread);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 static DWORD WINAPI StartProc(void* p)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 CPrintJob* pThis = (CPrintJob*)p;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 pThis->StartHelper();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 pThis->m_bComplete = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 bool StartHelper()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 CDC dcPrinter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 dcPrinter.Attach(m_printer.CreatePrinterDC(m_pDefDevMode));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 if (dcPrinter.IsNull())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 m_nJobID = ::StartDoc(dcPrinter, &m_docinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 if (m_nJobID <= 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 m_pInfo->BeginPrintJob(dcPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 // print all the pages now
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 unsigned long nLastPage = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 for (unsigned long nPage = m_nStartPage; nPage <= m_nEndPage; nPage++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 if (!m_pInfo->IsValidPage(nPage))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 DEVMODE* pdm = m_pInfo->GetNewDevModeForPage(nLastPage, nPage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 if (pdm != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 dcPrinter.ResetDC(pdm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 dcPrinter.StartPage();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 m_pInfo->PrePrintPage(nPage, dcPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 if (!m_pInfo->PrintPage(nPage, dcPrinter))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 m_bCancel = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 m_pInfo->PostPrintPage(nPage, dcPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 dcPrinter.EndPage();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 if (m_bCancel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 nLastPage = nPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 m_pInfo->EndPrintJob(dcPrinter, m_bCancel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 if (m_bCancel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 ::AbortDoc(dcPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 ::EndDoc(dcPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 m_nJobID = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 // Cancels a print job. Can be called asynchronously.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 void CancelPrintJob()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 m_bCancel = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 // CPrintPreview - Adds print preview support to an existing window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 class CPrintPreview
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 IPrintJobInfo* m_pInfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 CPrinterHandle m_printer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 CEnhMetaFile m_meta;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 DEVMODE* m_pDefDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 DEVMODE* m_pCurDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 SIZE m_sizeCurPhysOffset;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 // Constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 CPrintPreview() : m_pInfo(NULL), m_pDefDevMode(NULL), m_pCurDevMode(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 m_sizeCurPhysOffset.cx = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 m_sizeCurPhysOffset.cy = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 void SetPrintPreviewInfo(HANDLE hPrinter, DEVMODE* pDefaultDevMode, IPrintJobInfo* pji)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 m_printer.Attach(hPrinter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 m_pDefDevMode = pDefaultDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 m_pInfo = pji;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 m_nCurPage = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 m_pCurDevMode = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 void SetEnhMetaFile(HENHMETAFILE hEMF)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 m_meta = hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 void SetPage(int nPage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 if (!m_pInfo->IsValidPage(nPage))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 m_nCurPage = nPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 m_pCurDevMode = m_pInfo->GetNewDevModeForPage(0, nPage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 if (m_pCurDevMode == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 m_pCurDevMode = m_pDefDevMode;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 CDC dcPrinter = m_printer.CreatePrinterDC(m_pCurDevMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 int iWidth = dcPrinter.GetDeviceCaps(PHYSICALWIDTH);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 int iHeight = dcPrinter.GetDeviceCaps(PHYSICALHEIGHT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 int nLogx = dcPrinter.GetDeviceCaps(LOGPIXELSX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 int nLogy = dcPrinter.GetDeviceCaps(LOGPIXELSY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 RECT rcMM = { 0, 0, ::MulDiv(iWidth, 2540, nLogx), ::MulDiv(iHeight, 2540, nLogy) };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 m_sizeCurPhysOffset.cx = dcPrinter.GetDeviceCaps(PHYSICALOFFSETX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 m_sizeCurPhysOffset.cy = dcPrinter.GetDeviceCaps(PHYSICALOFFSETY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 CEnhMetaFileDC dcMeta(dcPrinter, &rcMM);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 m_pInfo->PrePrintPage(nPage, dcMeta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 m_pInfo->PrintPage(nPage, dcMeta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 m_pInfo->PostPrintPage(nPage, dcMeta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 m_meta.Attach(dcMeta.Close());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 void GetPageRect(RECT& rc, LPRECT prc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 int x1 = rc.right-rc.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 int y1 = rc.bottom - rc.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 if ((x1 < 0) || (y1 < 0))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 CEnhMetaFileInfo emfinfo(m_meta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 // Compute whether we are OK vertically or horizontally
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 int x2 = pmh->szlDevice.cx;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 int y2 = pmh->szlDevice.cy;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 int y1p = MulDiv(x1, y2, x2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 int x1p = MulDiv(y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 ATLASSERT((x1p <= x1) || (y1p <= y1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 if (x1p <= x1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 prc->left = rc.left + (x1 - x1p) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 prc->right = prc->left + x1p;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 prc->top = rc.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 prc->bottom = rc.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 prc->left = rc.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 prc->right = rc.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 prc->top = rc.top + (y1 - y1p) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 prc->bottom = prc->top + y1p;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 // Painting helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 void DoPaint(CDCHandle dc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 // this one is not used
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 void DoPaint(CDCHandle dc, RECT& rc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 CEnhMetaFileInfo emfinfo(m_meta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 int nOffsetX = MulDiv(m_sizeCurPhysOffset.cx, rc.right-rc.left, pmh->szlDevice.cx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 int nOffsetY = MulDiv(m_sizeCurPhysOffset.cy, rc.bottom-rc.top, pmh->szlDevice.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 dc.OffsetWindowOrg(-nOffsetX, -nOffsetY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 dc.PlayMetaFile(m_meta, &rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 // Implementation - data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 int m_nCurPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 // CPrintPreviewWindow - Implements a print preview window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 class ATL_NO_VTABLE CPrintPreviewWindowImpl : public ATL::CWindowImpl<T, TBase, TWinTraits>, public CPrintPreview
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 DECLARE_WND_CLASS_EX2(NULL, T, CS_VREDRAW | CS_HREDRAW, -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 enum { m_cxOffset = 10, m_cyOffset = 10 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 // Constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 CPrintPreviewWindowImpl() : m_nMinPage(0), m_nMaxPage(0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 void SetPrintPreviewInfo(HANDLE hPrinter, DEVMODE* pDefaultDevMode,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 IPrintJobInfo* pji, int nMinPage, int nMaxPage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 CPrintPreview::SetPrintPreviewInfo(hPrinter, pDefaultDevMode, pji);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 m_nMinPage = nMinPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 m_nMaxPage = nMaxPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 bool NextPage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 if (m_nCurPage == m_nMaxPage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 SetPage(m_nCurPage + 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 this->Invalidate();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 bool PrevPage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 if (m_nCurPage == m_nMinPage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 if (m_nCurPage == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 SetPage(m_nCurPage - 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 this->Invalidate();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 // Message map and handlers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 BEGIN_MSG_MAP(CPrintPreviewWindowImpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 MESSAGE_HANDLER(WM_PAINT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 return 1; // no need for the background
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 RECT rc = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 if(wParam != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 pT->DoPrePaint((HDC)wParam, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 pT->DoPaint((HDC)wParam, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 CPaintDC dc(this->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 pT->DoPrePaint(dc.m_hDC, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 pT->DoPaint(dc.m_hDC, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 // Painting helper
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 void DoPrePaint(CDCHandle dc, RECT& rc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 RECT rcClient = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 this->GetClientRect(&rcClient);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 RECT rcArea = rcClient;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 (void)pT; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 ::InflateRect(&rcArea, -pT->m_cxOffset, -pT->m_cyOffset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 if (rcArea.left > rcArea.right)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 rcArea.right = rcArea.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 if (rcArea.top > rcArea.bottom)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 rcArea.bottom = rcArea.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 GetPageRect(rcArea, &rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 CRgn rgn1, rgn2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 rgn1.CreateRectRgnIndirect(&rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 rgn2.CreateRectRgnIndirect(&rcClient);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 rgn2.CombineRgn(rgn1, RGN_DIFF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 dc.SelectClipRgn(rgn2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 dc.FillRect(&rcClient, COLOR_BTNSHADOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 dc.SelectClipRgn(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 dc.FillRect(&rc, (HBRUSH)::GetStockObject(WHITE_BRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 // Implementation - data
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 int m_nMinPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 int m_nMaxPage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 class CPrintPreviewWindow : public CPrintPreviewWindowImpl<CPrintPreviewWindow>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 DECLARE_WND_CLASS_EX(_T("WTL_PrintPreview"), CS_VREDRAW | CS_HREDRAW, -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 // CZoomPrintPreviewWindowImpl - Implements print preview window with zooming
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 #ifdef __ATLSCRL_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 class ATL_NO_VTABLE CZoomPrintPreviewWindowImpl : public CPrintPreviewWindowImpl< T, TBase, TWinTraits >, public CZoomScrollImpl< T >
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 bool m_bSized;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 CZoomPrintPreviewWindowImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 this->SetScrollExtendedStyle(SCRL_DISABLENOSCROLL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 InitZoom();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 // should be called to reset data members before recreating window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 void InitZoom()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 m_bSized = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 this->m_nZoomMode = ZOOMMODE_OFF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 this->m_fZoomScaleMin = 1.0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953 this->m_fZoomScale = 1.0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 BEGIN_MSG_MAP(CZoomPrintPreviewWindowImpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 MESSAGE_HANDLER(WM_SETCURSOR, CZoomScrollImpl< T >::OnSetCursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 MESSAGE_HANDLER(WM_VSCROLL, CScrollImpl< T >::OnVScroll)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 MESSAGE_HANDLER(WM_HSCROLL, CScrollImpl< T >::OnHScroll)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 MESSAGE_HANDLER(WM_MOUSEWHEEL, CScrollImpl< T >::OnMouseWheel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 MESSAGE_HANDLER(WM_MOUSEHWHEEL, CScrollImpl< T >::OnMouseHWheel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 MESSAGE_HANDLER(WM_SETTINGCHANGE, CScrollImpl< T >::OnSettingChange)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 MESSAGE_HANDLER(WM_LBUTTONDOWN, CZoomScrollImpl< T >::OnLButtonDown)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 MESSAGE_HANDLER(WM_MOUSEMOVE, CZoomScrollImpl< T >::OnMouseMove)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 MESSAGE_HANDLER(WM_LBUTTONUP, CZoomScrollImpl< T >::OnLButtonUp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 MESSAGE_HANDLER(WM_CAPTURECHANGED, CZoomScrollImpl< T >::OnCaptureChanged)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 MESSAGE_HANDLER(WM_SIZE, OnSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 MESSAGE_HANDLER(WM_PAINT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971 ALT_MSG_MAP(1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 COMMAND_ID_HANDLER(ID_SCROLL_UP, CScrollImpl< T >::OnScrollUp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 COMMAND_ID_HANDLER(ID_SCROLL_DOWN, CScrollImpl< T >::OnScrollDown)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 COMMAND_ID_HANDLER(ID_SCROLL_PAGE_UP, CScrollImpl< T >::OnScrollPageUp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 COMMAND_ID_HANDLER(ID_SCROLL_PAGE_DOWN, CScrollImpl< T >::OnScrollPageDown)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 COMMAND_ID_HANDLER(ID_SCROLL_TOP, CScrollImpl< T >::OnScrollTop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 COMMAND_ID_HANDLER(ID_SCROLL_BOTTOM, CScrollImpl< T >::OnScrollBottom)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 COMMAND_ID_HANDLER(ID_SCROLL_LEFT, CScrollImpl< T >::OnScrollLeft)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 COMMAND_ID_HANDLER(ID_SCROLL_RIGHT, CScrollImpl< T >::OnScrollRight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 COMMAND_ID_HANDLER(ID_SCROLL_PAGE_LEFT, CScrollImpl< T >::OnScrollPageLeft)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 COMMAND_ID_HANDLER(ID_SCROLL_PAGE_RIGHT, CScrollImpl< T >::OnScrollPageRight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 COMMAND_ID_HANDLER(ID_SCROLL_ALL_LEFT, CScrollImpl< T >::OnScrollAllLeft)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 COMMAND_ID_HANDLER(ID_SCROLL_ALL_RIGHT, CScrollImpl< T >::OnScrollAllRight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 SIZE sizeClient = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 POINT ptOffset = this->m_ptOffset;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 SIZE sizeAll = this->m_sizeAll;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 this->SetScrollSize(sizeClient);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 if(sizeAll.cx > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 ptOffset.x = ::MulDiv(ptOffset.x, this->m_sizeAll.cx, sizeAll.cx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 if(sizeAll.cy > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 ptOffset.y = ::MulDiv(ptOffset.y, this->m_sizeAll.cy, sizeAll.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 this->SetScrollOffset(ptOffset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 CScrollImpl< T >::OnSize(uMsg, wParam, lParam, bHandled);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 if(!m_bSized)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000 m_bSized = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 pT->ShowScrollBar(SB_HORZ, TRUE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 pT->ShowScrollBar(SB_VERT, TRUE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 RECT rc = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 if(wParam != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 CDCHandle dc = (HDC)wParam;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021 int nMapModeSav = dc.GetMapMode();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 dc.SetMapMode(MM_ANISOTROPIC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 SIZE szWindowExt = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 dc.SetWindowExt(this->m_sizeLogAll, &szWindowExt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 SIZE szViewportExt = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 dc.SetViewportExt(this->m_sizeAll, &szViewportExt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027 POINT ptViewportOrg = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 dc.SetViewportOrg(-this->m_ptOffset.x, -this->m_ptOffset.y, &ptViewportOrg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 pT->DoPrePaint(dc, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 pT->DoPaint(dc, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 dc.SetMapMode(nMapModeSav);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 dc.SetWindowExt(szWindowExt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 dc.SetViewportExt(szViewportExt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 dc.SetViewportOrg(ptViewportOrg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 CPaintDC dc(pT->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 pT->PrepareDC(dc.m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 pT->DoPrePaint(dc.m_hDC, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 pT->DoPaint(dc.m_hDC, rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 // Painting helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 void DoPaint(CDCHandle dc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 // this one is not used
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 void DoPrePaint(CDCHandle dc, RECT& rc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 RECT rcClient = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 this->GetClientRect(&rcClient);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 RECT rcArea = rcClient;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 (void)pT; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 ::InflateRect(&rcArea, -pT->m_cxOffset, -pT->m_cyOffset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 if (rcArea.left > rcArea.right)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 rcArea.right = rcArea.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 if (rcArea.top > rcArea.bottom)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 rcArea.bottom = rcArea.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 this->GetPageRect(rcArea, &rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 HBRUSH hbrOld = dc.SelectBrush(::GetSysColorBrush(COLOR_BTNSHADOW));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 dc.PatBlt(rcClient.left, rcClient.top, rc.left - rcClient.left, rcClient.bottom - rcClient.top, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 dc.PatBlt(rc.left, rcClient.top, rc.right - rc.left, rc.top - rcClient.top, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 dc.PatBlt(rc.right, rcClient.top, rcClient.right - rc.right, rcClient.bottom - rcClient.top, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 dc.PatBlt(rc.left, rc.bottom, rc.right - rc.left, rcClient.bottom - rc.bottom, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 dc.SelectBrush((HBRUSH)::GetStockObject(WHITE_BRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 dc.PatBlt(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 dc.SelectBrush(::GetSysColorBrush(COLOR_3DDKSHADOW));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 dc.PatBlt(rc.right, rc.top + 4, 4, rc.bottom - rc.top, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 dc.PatBlt(rc.left + 4, rc.bottom, rc.right - rc.left, 4, PATCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 dc.SelectBrush(hbrOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 void DoPaint(CDCHandle dc, RECT& rc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 CEnhMetaFileInfo emfinfo(this->m_meta);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 ENHMETAHEADER* pmh = emfinfo.GetEnhMetaFileHeader();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 int nOffsetX = MulDiv(this->m_sizeCurPhysOffset.cx, rc.right-rc.left, pmh->szlDevice.cx);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 int nOffsetY = MulDiv(this->m_sizeCurPhysOffset.cy, rc.bottom-rc.top, pmh->szlDevice.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 dc.OffsetWindowOrg(-nOffsetX, -nOffsetY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 dc.PlayMetaFile(this->m_meta, &rc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093 class CZoomPrintPreviewWindow : public CZoomPrintPreviewWindowImpl<CZoomPrintPreviewWindow>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 DECLARE_WND_CLASS_EX(_T("WTL_ZoomPrintPreview"), CS_VREDRAW | CS_HREDRAW, -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 #endif // __ATLSCRL_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 #endif // __ATLPRINT_H__