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


Многостраничных документов

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

  • Протокол печати

  • Переопределение функций класса представления

  • Разбиение на страницы

  • Принтера для страницы.страницы документа

  • Разбиение на страницы Печат-Time

Протокол печати

Напечатать многостраничных документ, границы и представление интерактивные следующим образом.Сначала границы отображают диалоговое окно Печать, создают контекст устройства для принтера и вызывает функцию-член StartDoc объекта CDC.Затем для каждой страницы документа, платформа вызывает функцию функцию-член StartPage объекта CDC, указывают объект представления для печати страницы и вызывает функцию-член EndPage.Если режим принтера, необходимо изменить перед запуском указанная страница, то представление вызывает ResetDC, которая обновляет структура DEVMODE, содержащий новые сведения о режиме принтера.Если весь документ был напечатан, инфраструктура вызывает функцию-член EndDoc.

Переопределение функций класса вид

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

CView переопределяемые функции печати

Имя

Причина для переопределения

OnPreparePrinting

Вставлять значения в диалоговое окно печать, особенно длина документа

OnBeginPrinting

Выбрать шрифты или других ресурсов GDI

OnPrepareDC

Настроить атрибуты контекста устройства для данной страницы или выполнить разбиение на страницы печат-Time

OnPrint

Печати данной странице

OnEndPrinting

Ресурсов GDI - отменяет

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

Следующий рисунок иллюстрирует шаги, участвующих в процессе печати и показывает, где каждый из функции-члены печати entity_CODECView вызывается.В оставшейся части этой статьи большинство этих этапов описаны более подробно.Дополнительные части процесса печати описаны в статье Выделение ресурсов GDI.

Цикла печати

Процедура цикла печати

Разбиение на страницы

Границы хранят многие сведения о задании печати в структуре CPrintInfo.Некоторые из значений в CPrintInfo относятся к разбиению на страницы. эти значения доступны как показано в следующей таблице.

Число страниц, хранящихся в CPrintInfo

Переменная члена или

имена функций

Ссылочный номер страницы

GetMinPage/SetMinPage

Первой страницы документа

GetMaxPage/SetMaxPage

Последняя страница документа

GetFromPage

Первой страницы для печати

GetToPage

Последняя страница для печати

m_nCurPage

В настоящее время, печатанной страница

Запуск в 1, то есть первая страница номеров страниц пронумерован 1, а не 0.Дополнительные сведения об этом и других членах из CPrintInfo см. в разделе MFC.

В начале процесса печати, платформа вызывает функцию функцию-член OnPreparePrinting представления, передав указатель на структуру CPrintInfo.Мастер приложений предоставляет реализацию OnPreparePrinting, которая вызывает DoPreparePrinting другой функции-члена CView.DoPreparePrinting функция, которая отображает диалоговое окно печать и создает контекст устройства принтера.

На этом этапе приложение не знает количество страниц в документе.Он использует значения по умолчанию 1 цифр и 0xFFFF для первой и последней страницы документа.Если известно, сколько страниц документ имеет переопределите OnPreparePrinting и вызов SetMaxPage для структуры CPrintInfo прежде чем отправлять их в DoPreparePrinting.Это позволяет определить длину документа.

DoPreparePrinting затем отображает диалоговое окно печать.Возвращается, когда структура CPrintInfo содержит значения, указанные пользователем.Если желания пользователя для печати только выделенный диапазон страниц, его или ее могут указать начальный и конечный номера страниц в диалоговом окне печать.Границы получают эти значения с помощью функции GetFromPage и GetToPageCPrintInfo.Если пользователь не задает диапазон страниц, то платформа вызывает функцию GetMinPage и GetMaxPage и используют значения, возвращаемые на печать всего документа.

Для каждой страницы документа, которое необходимо вывести на печать, платформа вызывает функцию 2 функции-члена в классе OnPrepareDC и OnPrint представления и передают каждой функцией 2 параметра: указатель на объект CDC и указатель на структуру CPrintInfo.Каждый раз, когда платформа вызывает функцию OnPrepareDC и OnPrint они передают другое значение в элементе m_nCurPage структуры CPrintInfo.В этом случае платформа говорят представление, страница должна быть печатается.

Функция-член OnPrepareDC также используется для экрана.Он выполняет перехода на контекст устройства, прежде чем рисование выполняется.OnPrepareDC используется аналогичная роль в печать, но некоторые различия. во-первых, объект CDC представляет контекст устройства принтер вместо контекста устройства экрана, а во-вторых, объект CPrintInfo передается в качестве второго параметра.(Этот параметр NULL при OnPrepareDC вызывается для экрана). Переопределите OnPrepareDC для перехода на контекст устройства, основанному на страницу, которая печатается.Например, можно переместить начало координат окна просмотра, а область обрезки, чтобы обеспечить соответствующую часть документа возвращает выводимой на печать.

Функция-член OnPrint выполняет фактическую печать страницы.На статью В качестве default для печати Готово показано, как вызовы OnDraw границ с контекстом устройства принтера выполнить печать.Точнее, платформа вызывает функцию OnPrint со структурой CPrintInfo и контекстом устройств и OnPrint передает контекст устройства, в OnDraw.Переопределение OnPrint для выполнения любой отрисовка, которая должна быть создана только во время печати, а не для экрана.Например, печатать заголовки и нижние колонтитулы (см. статью заголовки и нижние колонтитулы дополнительные сведения).Затем вызовите OnDraw из переопределения OnPrint чтобы выполнить отрисовку общую как на экране, так и для печати.

Тот факт, что OnDraw выполняет отрисовку для экрана, так и для печати означает, что приложение режим WYSIWYG: «Что видно, что вы получаете». Однако предположим, что приложение не записывает режим WYSIWYG.Рассмотрим, например, текстовый редактор, который использует полужирный шрифт для кодов ввести но отображает элемент управления для отображения полужирного текста на экране.В такой ситуации использовании строго OnDraw для экрана.При переопределении OnPrint, замените вызов OnDraw с вызовом отдельные функции документа.Функция строит документ, как отображается на бумаги, используя атрибуты, которые не отображаются на экране.

Принтера для страницы.Страницы документа

При обращении к числа страниц, иногда требуется различать понятием принтер страницы и понятием документа страницы.с точки зрения принтера, страница один лист бумаги.Однако один лист бумаги не всегда равна одной страницы документа.Например, если ввести газетную верстку, где листы быть сложенным, один лист бумаги могут содержать обе первой и последней страницы документа, параллельной.Аналогично, если ввести электронную таблицу, то документ не состоит из страниц.Вместо этого один лист бумаги может содержать строки 1 до 20, столбцы с 6 до 10.

Все числа страниц в структуре CPrintInfo относятся к страницам принтера.Платформа вызывает функцию OnPrepareDC и OnPrint один раз для каждого листа бумаги, который передает через принтер.При переопределении функции OnPreparePrinting, чтобы определить длину документа, следует использовать страницы принтера.Если однозначное соответствие (то есть одна страница принтера равно одной страницы документа), то это легко.С другой стороны, если страницы документа и страниц принтера не совпадают, то необходимо перевести между ними.Например, рассмотрим напечатать электронную таблицу.При переопределении метода OnPreparePrinting необходимо вычислить для напечатали всю электронную таблицу, а затем использовать количество листов бумаги то значение при вызове функции-члена SetMaxPageCPrintInfo.Аналогично, переопределяя OnPrepareDC, необходимо перевести m_nCurPage в диапазоне строк и столбцов, которые отображаются для этого указанный лист и затем отрегулируются начало координат окна просмотра, соответственно.

Разбиение на страницы Печат-Time

В некоторых случаях класс представлений не может заранее знать, сколько времени документ, пока не будет напечатан.Например, предположим, что приложение не является режим WYSIWYG, поэтому длина документа на экране не соответствует его длины при печати.

Это вызывает проблему при переопределении OnPreparePrinting для класса представления. нельзя передавать значение функции SetMaxPage структуры CPrintInfo, так как неизвестно длину документа.Если пользователь не задает номер страницы для остановки на использовании диалогового окна печати, то границы не знают, когда остановки цикла печати.Единственным способом определения момента остановки цикла печати документа на печать out и посмотреть, когда он завершен.Класс представления должно проверять конца документа, пока он печатается, и затем информировать инфраструктуру при достижении конца.

Границы используют функции OnPrepareDC типа представления, чтобы сообщить их при остановке.После того как каждый вызов OnPrepareDC платформа проверяет элемент вызываемой структуры CPrintInfom_bContinuePrinting.Значение по умолчанию TRUE. Пока она остается таким образом, откладываются границы цикла печати.Если задано значение Ложь, то границы останавливается.Выполнить разбиение на страницы печат-Time, переопределение OnPrepareDC, чтобы проверить, выполняется ли достигнут конец документа и набор m_bContinuePrinting к Ложь, если он имеется.

Реализация по умолчанию OnPrepareDC задает m_bContinuePrinting к Ложь, если текущая страница больше 1.Это значит, что, если не была задана длина документа, то границы принимают документ одной страницы.Вследствие этого, что он следует проявлять осторожность при вызове версия базового класса OnPrepareDC.Не следует предполагать, что m_bContinuePrinting будет Истина после вызова версия базового класса.

w7wzay73.collapse_all(ru-ru,VS.110).gifДополнительные сведения

См. также

Ссылки

Печать

Класс CView

Класс CDC