|
Программирование >> Программирование с использованием ajax
PrintDialog +ShowDialog() +Reset() PrinterSettings +lnstalleclPrinters PageSetupDialog +ShowDialog() +Reset() PrintDocument +Print() #OnBeginPrint() #OnEndPrint() #OnPrintPage() PrintController #OnStartPrint() #OnStartPage() #OnEndPage() #OnEndPrint() +Print() +PrintLoop() PageSettings +PaperSize +PaperSource +Margins PrintPageEventArgs +HasMorePages +PageBounds +MarginBounds
Puc. 17.18. Архитектура печати Рассмотрим функциональные возможности этих классов. □ Класс PrintDocument является наиболее важным. На рис. 17.18 видно, что почти все остальные классы связаны с ним. Чтобы выполнить печать документа, нужно располагать экземпляром класса PrintDocument. Последовательность действий по печати, запускаемая этим классом, рассмотрена в следующем разделе. □ Класс PrintController управляет потоком задачи печати. Контроллер печати содержит события для запуска печати, для обработки каждой страницы и для завершения печати. Этот класс является абстрактным, поскольку реализация обычной печати отличается от реализации предварительного просмотра печатного документа. Конкретные классы, производные от PrintController - StandardPrintController и PreviewPrintController. Описания методов PrintOnPrintLoopO отсутствуют в документации, поскольку эти методы являются внутренними методами сборки и могут вызываться только другими классами данной сборки, такими как класс PrintDocument. Однако эти методы помогут разобраться в процессе печати, и поэтому они нашли свое отражение в этой главе. □ Класс PrinterSettings может получать и устанавливать такие параметры конфигурации принтера, как двусторонняя печать, альбомная или книжная ориентация и количество копий. □ Класс PrintDialog содержит параметры выбора принтера для печати и способа конфигурирования PrinterSettings. Этот класс, подобно другим уже описанным классам диалоговых окон, является производным от CommonDialog. □ Класс PageSettings определяется размеры и поля страницы печати и то, является ли она черно-белой или цветной. Конфигурирование этого класса можно выполнять посредством класса PageSetupDialog, производным от CommonDialog. Application +PrintDocument Печать OnBeginPrintO OnPrintPageO OnEndPrintO +PrintController Печать OnBeginPrintO OnPrintPageO OnEndPrintO OnStartPrintO OnStartPageO Метод PrintLoopO повторяет свои действия для каждой страницы PrintLoopO OnEndPageO OnEndPrintO Рис. 17.19. Выполнение печати Последовательность печати Теперь, когда вы узнали о ролях классов в архитектуре печати, рассмотрим основную последовательность процесса печати. Действия основных компонентов - приложения, экземпляра класса PrintDocument и класса PrintController - во времени показаны на рис. 17.19. Приложение должно вызвать метод Print () класса PrintDocument. Это запускает последовательность печати. Поскольку сам класс PrintDocument не отвечает за поток печати, задание передается классу PrintController посредством вызова метода Print О этого класса. PrintController предпринимает необходимое действие и информирует PrintDocument о начале печати, вызывая метод OnBeginPrint (). Если приложение должно выполнить какие-либо действия при запуске задания, необходимо зарегистрировать обработчик события в классе PrintDocument, чтобы соответствующая информация была доступна в классе приложения. В ситуации, изображенной на рис. 17.19, предполагается, что мы зарегистрировали обработчик OnBeginPrint (). Поэтому этот обработчик вызывается из класса PrintDocument. После завершения начального этапа PrintController выполняет вход в метод PrintLoop О , вызывая метод OnPrintPage () в классе PrintDocument для каждой печатаемой страницы. OnPrintPage () вызывает все обработчики события PrintPage. Такие обработчики нужно реализовать в каждом случае, иначе ничего не будет напечатано. На рис. 17.19 обработчик назван OnPrintPage (). После того, как последняя страница напечатана, PrintController вызывает метод OnEndPrint () в классе PrintDocument. При желании можно реализовать также обработчик, который будет вызваться на этом этапе. Главное, что следует запомнить - это то, что код печати можно реализовать в обработчике события PrintDocument. PrintPage. Этот обработчик будет вызываться для каждой страницы, предназначенной для печати. При наличии кода, который должен вызываться только один раз в рамках задания печати, нужно реализовать обработчики событий BeginPrint и EndPrint. Событие PrintPage Как вы уже знаете, необходимо реализовать обработчик события PrintPage. Делегат PrintPageEventHandler определяет аргументы обработчика: public delegate void PrintPageEventHandler (object sender, PrintPageEventArgs e); Как видно из этого фрагмента кода, мы получаем объект типа PrintPageEventArgs. Для ознакомления с основными свойствами этого класса, связанного с классами PageSettings и Graphics, обратитесь к схеме классов. Первый из этих двух классов позволяет устанавливать размеры и поля печатного листа, а также получать информацию об устройстве от принтера. И наоборот, класс Graphics позволяет получать доступ к контексту принтера и отправлять на принтер такие данные, как строки, линии и кривые. GDI (Graphics Device Interface - интерфейс графических устройств) позволяет выполнять вывод графических данных на таком устройстве как жран или принтер. Технология прорисовки GDI+, используемая в каркасе .NET, представляет собой следующее поколение GDI, предлагая такие дополнительные функциональные возможности, как градиентные кисти и альфа-сопряжение. Прорисовка посредством интерфейса GDI+ и класса Graphics подроб нее описана в главе 30. Если на этом этапе печать представляется вам сложной задачей, не беспокойтесь! Следующий пример должен вас убедить, что добавление возможностей печати в приложение - достаточно простая задача. Прежде чем добавлять диалоговое окно PrintDialog, необходимо добавить в приложение ряд пунктов меню печати. Добавьте в приложение SimpleEditor два разделителя и элементы меню Print (Печать), Print Preview (Просмотр печати). Page Setup (Параметры страницы) и Exit (Выход). Свойства Name и Text и методы обработчиков новых элементов меню представлены в табл. 17.4. Таблица 17.4. Значения свойств Name и Text и методы обработчиков новых элементов меню Имя элемента меню Свойство Text Обработчик miFilePrint &Print OnFilePrint miFilePrintPreview Print Pre&view OnFilePrintPreview miFilePageSetup Page Set&up OnFilePageSetup mlFileExit E&xit OnExit Теперь меню должно выглядеть, как показано на рис. 17.20.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |