На этом шаге мы рассмотрим некоторые аспекты управления процессом печати.
Графическое воспроизведение данных приложения на печатную страницу не вызывает затруднений, поскольку для вывода и на экран и на принтер используется одна и та же функция OnDraw(), которая вызывается как в функции CView::OnPrint(), так и в CWnd::OnPaint().
При печати:
В число переопределяемых входят и те функции, в которых реализуется постраничная печать документа, выделяются GDI-ресурсы для печати, перед выводом страницы на печать посылаются управляющие работой принтера ESC-последовательности. Чтобы изменить стандартный процесс печати, Вы можете переопределить некоторые функциии. Все они являются членами класса CView:
Функция | Действия |
---|---|
Позволяет, изменив элементы структуры CPRINTIINFO, ввести собственные значения в диалоговое окно Print. Обычно применяется для установки размера печатаемого документа. Передает структуру CPRINTIINFO методу CView::DoPreparePrinting(), который отображает упомянутое диалоговое окно и создает объект контекста устройства печати | |
OnBeginPrinting() | Получает шрифты и другие GDI-ресурсы для вывода на печать |
OnPrepareDC() | Настраивает атрибуты контекста устройства для данной страницы. Если длина документа не задана, выполняет поиск конца документа |
OnPrint() | Предназначена для печати данной страницы и по умолчанию вызывает OnDraw(), которая воспроизводит выводимое изображение. Можно переопределить эту функцию, чтобы страница печати существенно отличалась от изображения на экране |
OnEndPrinting() | Позволяет освободить GDI-ресурсы |
На рисунке 1 показан весь цикл печати и порядок вызова функций печати.
Рис.1. Цикл печати в MFC-приложении
В настоящий момент в диалоговом окне Print приложения МуАрр можно задать любой диапазон страниц для печати. Эту возможность следует заблокировать, чтобы печатать только одну страницу данных. Добавим код в функцию СМуАррView::OnPreparePrinting(), который будет задавать максимальное число печатаемых страниц, равное 1.
pInfo->SetMaxPage(1);
Рис.2. Функция OnPreparePrinting()
Текст измененного приложения можно взять здесь (60,2 Кб).
На следующем шаге мы рассмотрим предварительный просмотр.