Поделиться через


Архитектура предварительного просмотра печати

В этой статье объясняется, как платформа MFC реализует функции предварительной версии печати. В книге рассматриваются такие темы:

Предварительный просмотр печати отличается от отображения на экране и от фактической печати, поскольку, вместо непосредственного вывода изображения на устройство, приложение должно имитировать работу принтера, используя экран. Для этого библиотека классов Microsoft Foundation определяет специальный (незадокументированные) класс, производный от класса CDC, называемый CPreviewDC. Все CDC объекты содержат два контекста устройства, но обычно они идентичны. CPreviewDC В объекте они отличаются: первый представляет имитируемый принтер, а второй — экран, на котором фактически отображаются выходные данные.

Процесс предварительного просмотра печати

Когда пользователь выбирает команду "Предварительный просмотр печати" в меню "Файл ", платформа создает CPreviewDC объект. Всякий раз, когда приложение выполняет операцию, которая задает характеристику контекста устройства принтера, платформа также выполняет аналогичную операцию в контексте устройства с экрана. Например, если приложение выбирает шрифт для печати, платформа выбирает шрифт для отображения экрана, имитируемого шрифта принтера. Когда приложение будет отправлять выходные данные на принтер, платформа вместо этого отправляет выходные данные на экран.

Предварительный просмотр отличается от печати порядком, в котором отображаются страницы документа. Во время печати платформа продолжает цикл печати, пока не будет отображен определенный диапазон страниц. Во время предварительной версии печати в любое время отображается одна или две страницы, а затем приложение ожидает; до тех пор, пока пользователь не ответит, не отображаются дополнительные страницы. Во время предварительного просмотра печати приложение также должно отвечать на сообщения WM_PAINT, так же, как и во время обычного отображения экрана.

Функция CView::OnPreparePrinting вызывается при вызове режима предварительного просмотра так же, как и в начале задания печати. Структура CPrintInfo , переданная функции, содержит несколько элементов, значения которых можно настроить для настройки определенных характеристик операции предварительного просмотра печати. Например, можно задать элемент m_nNumPreviewPages , чтобы указать, нужно ли просматривать документ в режиме одной или двухстраничной страницы.

Изменение предварительного просмотра печати

Вы можете изменить поведение и внешний вид предварительного просмотра печати различными способами довольно легко. Например, можно, помимо прочего:

  • Установите полосу прокрутки в окне предварительного просмотра печати, чтобы обеспечить легкий доступ к любой странице документа.

  • Откройте предварительный просмотр печати, чтобы сохранить текущее положение пользователя в документе, начиная его отображение с текущей страницы.

  • Вызвать выполнение различных процессов инициализации для предварительного просмотра и печати.

  • Вызвать предварительный просмотр печати для отображения номеров страниц в ваших форматах.

Если вы знаете длину документа и вызываете SetMaxPage с соответствующим значением, фреймворк может использовать эту информацию как в режиме предварительного просмотра, так и во время печати. После того как платформа знает длину документа, она может предоставить окно предварительного просмотра с полосой прокрутки, позволяя пользователю выполнять страницу обратно и вперед через документ в режиме предварительного просмотра. Если длина документа не задана, платформа не может разместить поле прокрутки для указания текущей позиции, поэтому платформа не добавляет полосу прокрутки. В этом случае пользователь должен использовать кнопки "Следующая страница" и "Предыдущая страница" на панели управления предварительного просмотра для страницы документа.

Для предварительного просмотра печати можно считать полезным назначить значение элементу m_nCurPageCPrintInfo, даже если вы никогда не сделаете это для обычной печати. Во время обычной печати этот элемент несет информацию из платформы в класс представления. Это то, как фреймворк указывает виду, какую страницу следует распечатать.

Напротив, при запуске режима предварительного просмотра печати элемент m_nCurPage несет информацию в противоположном направлении: от представления до фреймворка. Платформа использует значение этого члена, чтобы определить, какую страницу следует предварительно просмотреть. Значение по умолчанию этого элемента равно 1, поэтому первая страница документа отображается изначально. Вы можете переопределить OnPreparePrinting, чтобы установить этот элемент на номер просматриваемой страницы в момент вызова команды "Предварительный просмотр печати". Таким образом, приложение сохраняет текущее положение пользователя при переходе с обычного режима отображения на режим предварительного просмотра.

Иногда может потребоваться OnPreparePrinting выполнить другую инициализацию в зависимости от того, вызывается ли она для задания печати или предварительного просмотра. Это можно определить, проверив переменную члена m_bPreview в CPrintInfo структуре. Этот элемент имеет значение TRUE при вызове предварительного просмотра печати.

Структура CPrintInfo также содержит элемент с именем m_strPageDesc, который используется для форматирования строк, отображаемых в нижней части экрана в одностраничных и многостраничных режимах. По умолчанию эти строки имеют форму "Page n" и "Pages n - m", но вы можете изменить m_strPageDesc изнутри OnPreparePrinting и задать для строк что-то более сложное. Дополнительные сведения см. в разделе "Структура CPrintInfo " в справочнике по MFC .

См. также

Печать и предварительный просмотр
Печать
Класс CView
Класс CDC