]>
git.saurik.com Git - wxWidgets.git/blob - docs/doxygen/overviews/printing.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: topic overview
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
11 @page printing_overview Printing overview
22 #wxPageSetupDialogData
23 The printing framework relies on the application to provide classes whose member
24 functions can respond to particular requests, such as 'print this page' or 'does
25 this page exist in the document?'. This method allows wxWidgets to take over the
26 housekeeping duties of turning preview pages, calling the print dialog box,
27 creating the printer device context, and so on: the application can concentrate
28 on the rendering of the information onto a device context.
29 In most cases, the only class you will need to derive from is
30 #wxPrintout; all others will be used as-is.
31 A brief description of each class's role and how they work together follows.
32 For the special case of printing under Unix, where various different
33 printing backends have to be offered, please have a look at the
34 @ref unixprinting_overview.
47 @section topic9 #wxPrintout
49 A document's printing ability is represented in an application by a derived
50 wxPrintout class. This class prints a page on request, and can be passed to the
51 Print function of a wxPrinter object to actually print the document, or can be
52 passed to a wxPrintPreview object to initiate previewing. The following code
53 (from the printing sample) shows how easy it is to initiate printing, previewing
54 and the print setup dialog, once the wxPrintout functionality has been defined.
55 Notice the use of MyPrintout for both printing and previewing. All the preview
56 user interface functionality is taken care of by wxWidgets. For more details on how
57 MyPrintout is defined, please look at the printout sample code.
63 MyPrintout printout("My printout");
64 printer.Print(this, , @true);
69 // Pass two printout objects: for preview, and possible printing.
70 wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout);
71 wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650));
79 Class #wxPrintout assembles the printed page and (using
80 your subclass's overrides) writes requested pages to a #wxDC that
81 is passed to it. This wxDC could be a #wxMemoryDC (for
82 displaying the preview image on-screen), a #wxPrinterDC
83 (for printing under MSW and Mac), or a #wxPostScriptDC
84 (for printing under GTK or generating PostScript output).
85 The @ref docview_overview creates a default
86 wxPrintout object for every view, calling wxView::OnDraw to achieve a
87 prepackaged print/preview facility.
88 If your window classes have a Draw(wxDC *dc) routine to do screen rendering,
89 your wxPrintout subclass will typically call those routines to create portions
90 of the image on your printout. Your wxPrintout subclass can also make its own
91 calls to its wxDC to draw headers, footers, page numbers, etc.
92 The scaling of the drawn image typically differs from the screen to the preview
93 and printed images. This class provides a set of routines named
94 FitThisSizeToXXX(), MapScreenSizeToXXX(), and GetLogicalXXXRect, which can be
95 used to set the user scale and origin of the wxPrintout's DC so that your class
96 can easily map your image to the printout withough getting into the details of
97 screen and printer PPI and scaling. See the printing sample for examples of how
98 these routines are used.
100 @section topic10 #wxPrinter
102 Class wxPrinter encapsulates the platform-dependent print function with a common
103 interface. In most cases, you will not need to derive a class from wxPrinter;
104 simply create a wxPrinter object in your Print function as in the example above.
106 @section topic11 #wxPrintPreview
108 Class wxPrintPreview manages the print preview process. Among other things, it
109 constructs the wxDCs that get passed to your wxPrintout subclass for printing
110 and manages the display of multiple pages, a zoomable preview image, and so
111 forth. In most cases you will use this class as-is, but you can create your own
112 subclass, for example, to change the layout or contents of the preview window.
115 @section topic12 #wxPrinterDC
117 Class wxPrinterDC is the wxDC that represents the actual printed page under MSW
118 and Mac. During printing, an object of this class will be passed to your derived
119 wxPrintout object to draw upon. The size of the wxPrinterDC will depend on the
120 paper orientation and the resolution of the printer.
121 There are two important rectangles in printing: the page rectangle defines
122 the printable area seen by the application, and under MSW and Mac, it is the
123 printable area specified by the printer. (For PostScript printing, the page
124 rectangle is the entire page.) The inherited function
125 wxDC::GetSize returns the page size in device pixels. The
126 point (0,0) on the wxPrinterDC represents the top left corner of the page
127 rectangle; that is, the page rect is given by wxRect(0, 0, w, h), where (w,h)
128 are the values returned by GetSize.
129 The paper rectangle, on the other hand, represents the entire paper area
130 including the non-printable border. Thus, the coordinates of the top left corner
131 of the paper rectangle will have small negative values, while the width and
132 height will be somewhat larger than that of the page rectangle. The
133 wxPrinterDC-specific function
134 wxPrinterDC::GetPaperRect returns the paper
135 rectangle of the given wxPrinterDC.
137 @section topic13 #wxPostScriptDC
139 Class wxPostScriptDC is the wxDC that represents the actual printed page under
140 GTK and other PostScript printing. During printing, an object of this class will
141 be passed to your derived wxPrintout object to draw upon. The size of the
142 wxPostScriptDC will depend upon the #wxPrintData used to
144 Unlike a wxPrinterDC, there is no distinction between the page rectangle and the
145 paper rectangle in a wxPostScriptDC; both rectangles are taken to represent the
146 entire sheet of paper.
148 @section topic14 #wxPrintDialog
150 Class wxPrintDialog puts up the standard print dialog, which allows you to
151 select the page range for printing (as well as many other print settings, which
152 may vary from platform to platform). You provide an object of type
153 #wxPrintDialogData to the wxPrintDialog at
154 construction, which is used to populate the dialog.
156 @section topic15 #wxPrintData
158 Class wxPrintData is a subset of wxPrintDialogData that is used (internally) to
159 initialize a wxPrinterDC or wxPostScriptDC. (In fact, a wxPrintData is a data
160 member of a wxPrintDialogData and a wxPageSetupDialogData). Essentially,
161 wxPrintData contains those bits of information from the two dialogs necessary to
162 configure the wxPrinterDC or wxPostScriptDC (e.g., size, orientation, etc.). You
163 might wish to create a global instance of this object to provide call-to-call
164 persistence to your application's print settings.
166 @section topic16 #wxPrintDialogData
168 Class wxPrintDialogData contains the settings entered by the user in the print
169 dialog. It contains such things as page range, number of copies, and so forth.
170 In most cases, you won't need to access this information; the framework takes
171 care of asking your wxPrintout derived object for the pages requested by the
174 @section topic17 #wxPageSetupDialog
176 Class wxPageSetupDialog puts up the standard page setup dialog, which allows you
177 to specify the orientation, paper size, and related settings. You provide it
178 with a wxPageSetupDialogData object at intialization, which is used to populate
179 the dialog; when the dialog is dismissed, this object contains the settings
180 chosen by the user, including orientation and/or page margins.
181 Note that on Macintosh, the native page setup dialog does not contain entries
182 that allow you to change the page margins. You can use the Mac-specific class
183 wxMacPageMarginsDialog (which, like wxPageSetupDialog, takes a
184 wxPageSetupDialogData object in its constructor) to provide this capability; see
185 the printing sample for an example.
187 @section topic18 #wxPageSetupDialogData
189 Class wxPageSetupDialogData contains settings affecting the page size (paper
190 size), orientation, margins, and so forth. Note that not all platforms populate
191 all fields; for example, the MSW page setup dialog lets you set the page margins
192 while the Mac setup dialog does not.
193 You will typically create a global instance of each of a wxPrintData and
194 wxPageSetupDialogData at program initiation, which will contain the default
195 settings provided by the system. Each time the user calls up either the
196 wxPrintDialog or the wxPageSetupDialog, you pass these data structures to
197 initialize the dialog values and to be updated by the dialog. The framework then
198 queries these data structures to get information like the printed page range
199 (from the wxPrintDialogData) or the paper size and/or page orientation (from the
200 wxPageSetupDialogData).