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


TN030. Настройка печати и предварительного просмотра

Примечание

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

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

Проблема

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

Эффективная печать

Когда приложение MFC типа с помощью стандартных методов, Windows направляет все вызовы графические вывода (GDI) приборного интерфейса к метафайлу памяти. При EndPage называется Windows метафайл выполняется один раз для каждой физической полосы принтера, требует введите одну страницу. В данной отрисовки, GDI запросы часто процедура прерывания, чтобы определить, он должен продолжается. Обычно процедура прерывания позволяет сообщения для обработки, чтобы пользователь мог отмены задания печати с помощью диалогового окна печати.

К сожалению, это может замедлить процесс печати. Если печать в приложении должна быть быстрее, чем может быть достигается с помощью стандартного метода необходимо реализовать вручную с помощью диапазонов.

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

Вручную полоса, необходимо реализовать re цикла печати так, что OnPrint вызывается несколько раз на странице (один раз для каждого полосу). Цикл печати реализована в функции OnFilePrint в viewprnt.cpp. В CView- производный класс, перегружаете этой функции, чтобы запись сопоставления сообщений для обработки команды на принтер вызывает пользовательскую функцию печати. Скопируйте процедуру OnFilePrint и измените цикла печати для реализации использование диапазонов. Возможно, потребуется также передавать прямоугольник использования диапазонов для пользовательских функций печати, чтобы оптимизировать изображение на основе раздела, печатанным страницы.

Во-вторых, необходимо вызвать QueryAbort, часто служит полоса. В противном случае процедура прерывания не получит вызываемой и пользователь не отменить задание печати.

Предварительный просмотр: Электронная бумага с интерфейсом пользователя

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

Настраивать предварительный просмотр

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

Добавление пользовательского интерфейса в режим просмотра

  1. Создайте производный класс из представления CPreviewView.

  2. Добавление обработчиков команд для аспектов пользовательского интерфейса, который требуется.

  3. При добавлении визуальных аспектов для отображения, переопределите OnDraw и запуске этого рисование после вызова CPreviewView::OnDraw.

OnFilePrintPreview

Это обработчик команды для предварительного просмотра. Эта реализация по умолчанию выглядит следующим образом:

void CView::OnFilePrintPreview()
{
    // In derived classes, implement special window handling here
    // Be sure to Unhook Frame Window close if hooked.

    // must not create this on the frame. Must outlive this function
    CPrintPreviewState* pState = new CPrintPreviewState;

    if (!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this,
                RUNTIME_CLASS(CPreviewView), pState))
    {
        // In derived classes, reverse special window handling
        // here for Preview failure case

        TRACE0("Error: DoPrintPreview failed");
        AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
        delete pState;      // preview failed to initialize, 
                    // delete State now
    }
}

DoPrintPreview — это основная область скрывает приложения. Панели элементов управления, например строка состояния, могут не сохраниться, указав их в элементе dwStates pState->(это битовую маску и биты для панелей отдельного элемента управления определяются AFX_IDW_MYBAR ( AFX_CONTROLBAR_MASK). PState->nIDMainPane окна окно, автоматически будет скрыт и reshown. затем DoPrintPreview создает панель кнопок для стандартного пользовательского интерфейса просмотра. Если особой обработки окна необходим, например, чтобы скрыть или отобразить другие окна, чтобы сделать до вызывается метод DoPrintPreview.

По умолчанию при завершении предварительный просмотр возвращается панели элементов управления в исходном состояние и основной области к отображаемому. Если обработка специальных необходим, то он должен быть выполнен в переопределении EndPrintPreview. Если DoPrintPreview завершается ошибкой, предоставить особой обработки.

DoPrintPreview вызывается с:

  • Идентификатор ресурс шаблона диалоговых окон для средства просмотра.

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

  • Класс среды выполнения класса представления просмотра. Это будет динамически создается в DoPrintPreview.

  • Указатель CPrintPreviewState. Обратите внимание, что структура CPrintPreviewState (или производная структура, если приложению требуется больше сохраненного состояния), необходимо создать во фрейме. DoPrintPreview безрежимно и эта структура должна сохраняться после до тех пор, пока EndPrintPreview не вызывается.

    Примечание

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

EndPrintPreview

Это называется для выполнения режим предварительного просмотра. Как правило, перейти к странице в документе, последнего отображается в режиме предварительного просмотра. EndPrintPreview для приложения, вероятность. Член m_nCurPage pInfo->страница, на последнего отображается (если левый 2 страницы обнаружены) и указатель, доступной на странице, где пользователь был заинтересован. Поскольку структура представления приложения неизестна на платформу, необходимо реализовать код переход к выбранной точке.

Необходимо выполнять большинство действия до вызова функции CView::EndPrintPreview. Этот метод возвращает влияние DoPrintPreview и удаляет pView, pDC и pInfo.

// Any further cleanup should be done here.
CView::EndPrintPreview(pDC, pInfo, point, pView);

CWinApp::OnFilePrintSetup

Это необходимо сопоставить для пункта меню настройки печати. В большинстве случаев не требуется переопределять реализацию.

Номенклатура страницы

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

В решение, пытаясь обеспечить обобщенное учесть следующие вещи. Представьте систему автоматизированного проектирования. Пользователь имеет рисунок, который охватывает несколько таблиц E- размера. В плоттере E- размера (или о, масштабированный), нумерация страниц была бы как в простом случае. Но в лазерном принтере, ввод страницы — размером 16 на таблицу, что учитывается страницей «предварительный просмотр»?

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

Строка описания страниц в структуре CPrintInfo предоставляет средство отображения номера страниц для пользователя, если ее можно представить в виде одного числа на странице, (как в «страница 1 " или «страницах 1-2»). Эта строка используется в реализации по умолчанию CPreviewView::OnDisplayPageNumber. Если необходимо отобразить другое, он может переопределить эту виртуальную функцию для предоставления, например «Sheet1, разделы a, B».

См. также

Другие ресурсы

Технические примечания по номеру

Технические примечания по категории