Архитектура предварительного просмотра
В этой статье объясняется, как платформа MFC реализует функции предварительной версии печати. В книге рассматриваются такие темы:
Предварительный просмотр печати отличается от экрана и печати, так как вместо непосредственного рисования изображения на устройстве приложение должно имитировать принтер с помощью экрана. Для этого библиотека классов Microsoft Foundation определяет специальный (незадокументированные) класс, производный от класса CDC, называемый CPreviewDC
. Все CDC
объекты содержат два контекста устройства, но обычно они идентичны. CPreviewDC
В объекте они отличаются: первый представляет имитируемый принтер, а второй — экран, на котором фактически отображаются выходные данные.
Процесс предварительного просмотра печати
Когда пользователь выбирает команду "Предварительный просмотр печати" в меню "Файл ", платформа создает CPreviewDC
объект. Всякий раз, когда приложение выполняет операцию, которая задает характеристику контекста устройства принтера, платформа также выполняет аналогичную операцию в контексте устройства с экрана. Например, если приложение выбирает шрифт для печати, платформа выбирает шрифт для отображения экрана, имитируемого шрифта принтера. Когда приложение будет отправлять выходные данные на принтер, платформа вместо этого отправляет выходные данные на экран.
Предварительный просмотр печати также отличается от печати в том порядке, в который каждый рисует страницы документа. Во время печати платформа продолжает цикл печати, пока не будет отображен определенный диапазон страниц. Во время предварительной версии печати в любое время отображается одна или две страницы, а затем приложение ожидает; до тех пор, пока пользователь не ответит, не отображаются дополнительные страницы. Во время предварительного просмотра печати приложение также должно отвечать на WM_PAINT сообщения, так же как и во время обычного экрана.
Функция CView::OnPreparePrinting вызывается при вызове режима предварительного просмотра так же, как и в начале задания печати. Структура CPrintInfo , переданная функции, содержит несколько элементов, значения которых можно настроить для настройки определенных характеристик операции предварительного просмотра печати. Например, можно задать элемент m_nNumPreviewPages , чтобы указать, следует ли просматривать документ в режиме одностраничного или двухстраничного просмотра.
Изменение предварительного просмотра печати
Поведение и внешний вид предварительной версии печати можно изменить с помощью нескольких способов. Например, можно, помимо прочего:
В окне предварительного просмотра печати отображается полоса прокрутки для простого доступа к любой странице документа.
Вызовите предварительную версию печати, чтобы сохранить положение пользователя в документе, начиная его отображение на текущей странице.
Причина выполнения различных инициализаций для предварительного просмотра и печати.
Создание предварительного просмотра печати для отображения номеров страниц в собственных форматах.
Если вы знаете, сколько времени документ находится и вызывается SetMaxPage
с соответствующим значением, платформа может использовать эти сведения в режиме предварительного просмотра, а также во время печати. После того как платформа знает длину документа, она может предоставить окно предварительного просмотра с полосой прокрутки, позволяя пользователю выполнять страницу обратно и вперед через документ в режиме предварительного просмотра. Если длина документа не задана, платформа не может разместить поле прокрутки для указания текущей позиции, поэтому платформа не добавляет полосу прокрутки. В этом случае пользователь должен использовать кнопки "Следующая страница" и "Предыдущая страница" на панели управления предварительного просмотра для страницы документа.
Для предварительного просмотра печати может оказаться полезным назначить значение элементу m_nCurPage , даже если вы никогда не сделаете это для обычной CPrintInfo
печати. Во время обычной печати этот элемент несет информацию из платформы в класс представления. Это то, как платформа сообщает представлению, какую страницу следует распечатать.
Напротив, при запуске режима предварительного просмотра m_nCurPage элемент несет информацию в противоположном направлении: от представления до платформы. Платформа использует значение этого члена, чтобы определить, какую страницу следует предварительно просмотреть. Значение по умолчанию этого элемента равно 1, поэтому первая страница документа отображается изначально. Вы можете переопределить OnPreparePrinting
, чтобы установить этот элемент на число просматриваемых страниц во время вызова команды "Предварительный просмотр печати". Таким образом, приложение сохраняет текущее положение пользователя при переходе с обычного режима отображения на режим предварительного просмотра.
Иногда может потребоваться OnPreparePrinting
выполнить другую инициализацию в зависимости от того, вызывается ли она для задания печати или предварительного просмотра. Это можно определить, проверив переменную члена m_bPreview в CPrintInfo
структуре. Этот элемент имеет значение TRUE при вызове предварительного просмотра печати.
Структура CPrintInfo
также содержит элемент с именем m_strPageDesc, который используется для форматирования строк, отображаемых в нижней части экрана в одностраничных и многостраничных режимах. По умолчанию эти строки имеют форму "Page n" и "Pages n - m", но вы можете изменить m_strPageDesc изнутри OnPreparePrinting
и задать строки более сложным. Дополнительные сведения см. в разделе "Структура CPrintInfo" в справочнике по MFC.
См. также
Печать и предварительный просмотр печати
Печать
Класс CView
Класс CDC