Процесс печати

   
На этом шаге мы рассмотрим некоторые аспекты управления процессом печати.

   
Графическое воспроизведение данных приложения на печатную страницу не вызывает затруднений, поскольку для
вывода и на экран и на принтер используется одна и та же функция OnDraw(), которая вызывается как в
функции CView::OnPrint(), так и в CWnd::OnPaint().

   
При печати:

  • на экран выводится диалоговое окно Print;
  • для принтера создается объект контекста устройства;
  • вызывается функция CDC::StartDoc(), извещающая принтер, что до тех пор, пока не вызвана функция
    CDC::EndDoc(), все последующие страницы должны составлять в буфере печати одно задание, благодаря чему
    документы, включающие несколько страниц не перемешаются с другими заданиями;
  • для каждой страницы вызываются функции CDC::StartPage() и CDC::EndPage(), сообщающие
    принтеру о начале и завершении страницы соответственно;
  • в определенные моменты времени вызываются переопределяемые функиии для вида.

   
В число переопределяемых входят и те функции, в которых реализуется постраничная печать документа, выделяются
GDI-ресурсы для печати, перед выводом страницы на печать посылаются управляющие работой принтера
ESC-последовательности. Чтобы изменить стандартный процесс печати, Вы можете переопределить некоторые
функциии. Все они являются членами класса CView:

Таблица 1. Переопределяемые функции печати

Функция Действия
OnPreparePrinting() Позволяет, изменив элементы структуры CPRINTIINFO, ввести собственные значения в диалоговое
окно Print. Обычно применяется для установки размера печатаемого документа. Передает структуру
CPRINTIINFO методу CView::DoPreparePrinting(), который отображает упомянутое диалоговое окно
и создает объект контекста устройства печати
OnBeginPrinting() Получает шрифты и другие GDI-ресурсы для вывода на печать
OnPrepareDC() Настраивает атрибуты контекста устройства для данной страницы. Если длина документа не задана, выполняет поиск конца документа
OnPrint() Предназначена для печати данной страницы и по умолчанию вызывает OnDraw(), которая воспроизводит выводимое изображение.
Можно переопределить эту функцию, чтобы страница печати существенно отличалась от изображения на экране
OnEndPrinting() Позволяет освободить GDI-ресурсы

   
На рисунке 1 показан весь цикл печати и порядок вызова функций печати.


Рис.1. Цикл печати в MFC-приложении

   
В настоящий момент в диалоговом окне Print приложения МуАрр можно задать любой диапазон
страниц для печати. Эту возможность следует заблокировать, чтобы печатать только одну страницу данных. Добавим
код в функцию СМуАррView::OnPreparePrinting(), который будет задавать максимальное число
печатаемых страниц, равное 1.

  • Установка максимального числа страниц печати.
  • Запустите приложение МуАрр. В меню File выберите команду
    Print и убедитесь, что функция задания диапазона страниц доступна.
  • На вкладке ClassView раскройте узел CMyAppView.
  • Дважды щелкните значок OnPreparePrinting(), чтобы отредактировать одноименный метод.
  • В тело функции перед оператором return добавьте следующую строку:
      pInfo->SetMaxPage(1);
    


    Рис.2. Функция OnPreparePrinting()

  • Соберите и запустите приложение МуАрр. В меню File выберите команду Print и
    убедитесь, что задание диапазона страниц заблокировано.

   
Текст измененного приложения можно взять здесь (60,2 Кб).

   
На следующем шаге мы рассмотрим предварительный просмотр.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий