Класс CView

Предоставляет базовую функциональность для определяемых пользователем классов представления.

Синтаксис

class AFX_NOVTABLE CView : public CWnd

Участники

Защищенные конструкторы

Имя Описание
CView::CView Формирует объект CView.

Открытые методы

Имя Описание
CView::DoPreparePrinting Отображает диалоговое окно "Печать" и создает контекст устройства принтера; вызывается при переопределении OnPreparePrinting функции-члена.
CView::GetDocument Возвращает документ, связанный с представлением.
CView::IsSelected Проверяет, выбран ли элемент документа. Требуется для поддержки OLE.
CView::OnDragEnter Вызывается при первом перетаскивании элемента в область перетаскивания представления.
CView::OnDragLeave Вызывается, когда перетаскиваемый элемент покидает область перетаскивания представления.
CView::OnDragOver Вызывается при перетаскивании элемента по области перетаскивания представления.
CView::OnDragScroll Вызывается, чтобы определить, перетаскивается ли курсор в область прокрутки окна.
CView::OnDrop Вызывается, когда элемент был удален в область перетаскивания представления, обработчик по умолчанию.
CView::OnDropEx Вызывается, когда элемент был удален в область перетаскивания представления, основной обработчик.
CView::OnInitialUpdate Вызывается после того, как представление сначала присоединено к документу.
CView::OnPrepareDC Вызывается перед вызовом OnDraw функции-члена для отображения экрана, или OnPrint функция-член вызывается для печати или предварительного просмотра печати.
CView::OnScroll Вызывается при перетаскивании элементов OLE за границы представления.
CView::OnScrollBy Вызывается при прокрутке представления, содержащего активные элементы OLE на месте.

Защищенные методы

Имя Описание
CView::OnActivateFrame Вызывается при активации или деактивации окна фрейма, содержащего представление.
CView::OnActivateView Вызывается при активации представления.
CView::OnBeginPrinting Вызывается при запуске задания печати; переопределите ресурсы интерфейса графического устройства (GDI).
CView::OnDraw Вызывается для отображения изображения документа для отображения экрана, печати или предварительного просмотра. Требуется реализация.
CView::OnEndPrinting Вызывается при завершении задания печати; переопределите ресурсы GDI, чтобы освободить ресурсы GDI.
CView::OnEndPrintPreview Вызывается при выходе из режима предварительного просмотра.
CView::OnPreparePrinting Вызывается перед печатью или предварительным просмотром документа; Переопределите диалоговое окно инициализации печати.
CView::OnPrint Вызывается для печати или предварительного просмотра страницы документа.
CView::OnUpdate Вызывается для уведомления о том, что документ был изменен.

Замечания

Представление присоединено к документу и выступает в качестве посредника между документом и пользователем: представление отображает изображение документа на экране или принтере и интерпретирует входные данные пользователя как операции с документом.

Представление — это дочерний элемент окна фрейма. Несколько представлений могут совместно использовать окно фрейма, как в случае окна разделения. Связь между классом представления, классом окна кадра и классом документа устанавливается CDocTemplate объектом. Когда пользователь открывает новое окно или разбивает существующее, платформа создает новое представление и присоединяет его к документу.

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

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

Представление отвечает за отображение и изменение данных документа, но не за хранение. Документ предоставляет представление с необходимыми сведениями о своих данных. Вы можете предоставить просмотру доступ к членам данных документа напрямую или предоставить функции-члены в классе документов для вызова класса представления.

При изменении данных документа представление, ответственное за изменения, обычно вызывает CDocument::UpdateAllViews функцию для документа, которая уведомляет все остальные представления, вызывая OnUpdate функцию-член для каждого. Реализация по умолчанию OnUpdate недействительна для всей клиентской области представления. Его можно переопределить, чтобы сделать недействительными только те регионы клиентской области, которые сопоставляют с измененными частями документа.

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

Представление обрабатывает сообщения полосы прокрутки с функциями-членами и CWnd::OnVScroll функциями-членамиCWnd::OnHScroll. Вы можете реализовать обработку сообщений полосы прокрутки в этих функциях или использовать производный CView класс CScrollView для обработки прокрутки.

CScrollViewКроме того, библиотека классов Microsoft Foundation предоставляет девять других классов, производных отCView:

  • CCtrlView— представление, позволяющее использовать документ — просматривать архитектуру с деревом, списком и расширенными элементами управления изменениями.

  • CDaoRecordView— представление, отображающее записи базы данных в элементах управления диалоговым окном.

  • CEditView— представление, которое предоставляет простой многострочного текстового редактора. Объект можно использовать CEditView как элемент управления в диалоговом окне, а также представление документа.

  • CFormView— прокручиваемое представление, содержащее элементы управления диалоговым окном и основанное на ресурсе шаблона диалогового окна.

  • CListView— представление, позволяющее использовать документ — архитектуру представления с элементами управления списком.

  • CRecordView— представление, отображающее записи базы данных в элементах управления диалоговым окном.

  • CRichEditView— представление, позволяющее использовать документ — архитектуру представления с расширенными элементами управления редактированием.

  • CScrollView— представление, которое автоматически обеспечивает поддержку прокрутки.

  • CTreeView— представление, позволяющее использовать архитектуру документа с элементами управления деревом.

Класс CView также имеет производный класс реализации с именем CPreviewView, который используется платформой для предварительного просмотра печати. Этот класс обеспечивает поддержку функций, уникальных для окна предварительного просмотра печати, таких как панель инструментов, одностраничный или двойной просмотр и увеличение масштаба, то есть увеличение предварительного просмотра изображения. Вам не нужно вызывать или переопределять какие-либо CPreviewViewфункции-члены, если вы не хотите реализовать собственный интерфейс для предварительного просмотра печати (например, если вы хотите поддерживать редактирование в режиме предварительного просмотра печати). Дополнительные сведения об использовании CViewсм. в разделе "Архитектура документа/представление" и "Печать". Кроме того, дополнительные сведения о настройке предварительного просмотра печати см . в техническом примечание 30 .

Иерархия наследования

CObject

CCmdTarget

CWnd

CView

Requirements

Заголовок.afxwin.h

CView::CView

Формирует объект CView.

CView();

Замечания

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

CView::DoPreparePrinting

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

BOOL DoPreparePrinting(CPrintInfo* pInfo);

Параметры

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

Возвращаемое значение

Ненулевое значение, если печать или предварительный просмотр могут начаться; Значение 0, если операция отменена.

Замечания

Поведение этой функции зависит от того, вызывается ли он для печати или предварительного просмотра (указанный m_bPreviewpInfo членом параметра). Если файл печатается, эта функция вызывает диалоговое окно "Печать", используя значения в CPrintInfo структуре, на которую pInfo указывает пользователь, после закрытия диалогового окна, функция создает контекст устройства принтера на основе параметров, указанных в диалоговом окне, и возвращает этот контекст устройства через pInfo параметр. Этот контекст устройства используется для печати документа.

При предварительном просмотре файла эта функция создает контекст устройства принтера с помощью текущих параметров принтера; этот контекст устройства используется для имитации принтера во время предварительной версии.

CView::GetDocument

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

CDocument* GetDocument() const;

Возвращаемое значение

Указатель на объект, связанный CDocument с представлением. NULL Значение , если представление не присоединено к документу.

Замечания

Это позволяет вызывать функции-члены документа.

CView::IsSelected

Вызывается платформой для проверка, выбран ли указанный элемент документа.

virtual BOOL IsSelected(const CObject* pDocItem) const;

Параметры

pDocItem
Указывает на тестируемый элемент документа.

Возвращаемое значение

Ненулевое значение, если выбран указанный элемент документа; в противном случае — 0.

Замечания

Реализация этой функции по умолчанию возвращается FALSE. Переопределите эту функцию, если вы реализуете выбор с помощью CDocItem объектов. Эту функцию необходимо переопределить, если представление содержит элементы OLE.

CView::OnActivateFrame

Вызывается платформой при активации или деактивации окна кадра, содержащего представление.

virtual void OnActivateFrame(
    UINT nState,
    CFrameWnd* pFrameWnd);

Параметры

nState
Указывает, активируется ли окно фрейма или деактивируется. Может иметь одно из следующих значений.

  • WA_INACTIVE Окно кадра деактивируется.

  • WA_ACTIVE Окно кадра активируется с помощью какого-то метода, отличного от щелчка мыши (например, с помощью интерфейса клавиатуры для выбора окна).

  • WA_CLICKACTIVE Окно фрейма активируется щелчком мыши

pFrameWnd
Указатель на окно кадра, которое необходимо активировать.

Замечания

Переопределите эту функцию-член, если вы хотите выполнить специальную обработку при активации или деактивации окна кадра, связанного с представлением. Например, CFormView выполняет это переопределение при сохранении и восстановлении элемента управления с фокусом.

CView::OnActivateView

Вызывается платформой при активации или деактивации представления.

virtual void OnActivateView(
    BOOL bActivate,
    CView* pActivateView,
    CView* pDeactiveView);

Параметры

bActivate
Указывает, активируется ли или деактивировано представление.

pActivateView
Указывает на объект представления, который активируется.

pDeactiveView
Указывает на объект представления, который деактивируется.

Замечания

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

pDeactiveView И pActivateView параметры указывают на то же представление, если основное окно фрейма приложения активируется без изменений в активном представлении, например, если фокус передается из другого приложения в это приложение, а не из одного представления в другое в приложении или при переключении между дочерними окнами MDI. Это позволяет представлению повторно реализовать палитру при необходимости.

Эти параметры отличаются при CFrameWnd::SetActiveView вызове представления, отличающегося от возвращаемого CFrameWnd::GetActiveView значения. Это происходит чаще всего с окнами разделения.

CView::OnBeginPrinting

Вызывается платформой в начале задания печати или предварительного просмотра после вызова OnPreparePrinting .

virtual void OnBeginPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

Параметры

pDC
Указывает на контекст принтера.

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

Замечания

Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы выделить все ресурсы GDI, такие как перья или шрифты, специально для печати. Выберите объекты GDI в контексте устройства из функции-члена для каждой OnPrint страницы, которая их использует. Если вы применяете один и тот же объект представления для вывода изображения на экран и печати, используйте отдельные переменные для ресурсов GDI, необходимых для каждого отображения. Это позволит обновлять экран во время печати.

Эту функцию также можно использовать для инициализаций, которые зависят от свойств контекста принтера. Например, число страниц, необходимых для печати документа, может зависеть от параметров, заданных пользователем в диалоговом окне печати (например, длина страницы). В такой ситуации невозможно указать длину документа в OnPreparePrinting функции-члене, где обычно это сделать; необходимо ждать, пока контекст устройства принтера не будет создан на основе параметров диалогового окна. OnBeginPrinting — это первая переопределяемая функция, которая предоставляет доступ к CDC объекту, представляющего контекст устройства принтера, поэтому можно задать длину документа из этой функции. Обратите внимание, что если к этому моменту длина документа не указана, во время предварительного просмотра полоса прокрутки отображаться не будет.

CView::OnDragEnter

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

virtual DROPEFFECT OnDragEnter(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

Параметры

pDataObject
Указывает на COleDataObject перетаскивание области представления.

dwKeyState
Содержит состояние ключей модификатора. Это сочетание любого числа следующих значений: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTONи MK_RBUTTON.

point
Текущая позиция мыши относительно клиентской области представления.

Возвращаемое значение

Значение из DROPEFFECT перечисленного типа, указывающее тип удаления, который будет возникать, если пользователь удал объект на этой позиции. Тип удаления обычно зависит от текущего состояния ключа, указанного dwKeyState. Стандартное сопоставление ключевых данных со DROPEFFECT значениями:

  • DROPEFFECT_NONE Объект данных нельзя удалить в этом окне.

  • DROPEFFECT_LINK Для MK_CONTROL|MK_SHIFT создания связи между объектом и сервером.

  • DROPEFFECT_COPY Для MK_CONTROL создания копии удаленного объекта.

  • DROPEFFECT_MOVE Для MK_ALT создания копии удаленного объекта и удаления исходного объекта. Обычно это эффект удаления по умолчанию, когда представление может принимать этот объект данных.

Дополнительные сведения см. в примере OCLIENTрасширенных концепций MFC.

Замечания

Реализация по умолчанию — это не делать ничего и возвращать DROPEFFECT_NONE.

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

CView::OnDragLeave

Вызывается платформой во время операции перетаскивания при перемещении мыши из допустимой области удаления для этого окна.

virtual void OnDragLeave();

Замечания

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

CView::OnDragOver

Вызывается платформой во время операции перетаскивания при перемещении мыши по окне целевого объекта удаления.

virtual DROPEFFECT OnDragOver(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

Параметры

pDataObject
Указывает на COleDataObject перетаскивание целевого объекта.

dwKeyState
Содержит состояние ключей модификатора. Это сочетание любого числа следующих значений: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTONи MK_RBUTTON.

point
Текущая позиция мыши относительно клиентской области представления.

Возвращаемое значение

Значение из DROPEFFECT перечисленного типа, указывающее тип удаления, который будет возникать, если пользователь удал объект на этой позиции. Тип удаления часто зависит от текущего состояния ключа, dwKeyStateкак указано. Стандартное сопоставление ключевых данных со DROPEFFECT значениями:

  • DROPEFFECT_NONE Объект данных нельзя удалить в этом окне.

  • DROPEFFECT_LINK Для MK_CONTROL|MK_SHIFT создания связи между объектом и сервером.

  • DROPEFFECT_COPY Для MK_CONTROL создания копии удаленного объекта.

  • DROPEFFECT_MOVE Для MK_ALT создания копии удаленного объекта и удаления исходного объекта. Обычно это эффект удаления по умолчанию, когда представление может принимать объект данных.

Дополнительные сведения см. в примере OCLIENTрасширенных концепций MFC.

Замечания

Реализация по умолчанию — не делать ничего и возвращать DROPEFFECT_NONE.

Переопределите эту функцию, чтобы предоставить пользователю визуальный отзыв во время операции перетаскивания. Так как эта функция вызывается непрерывно, любой код, содержащийся в нем, должен быть оптимизирован максимально максимально. Дополнительные сведения см. в статье OLE перетаскивания: реализация целевого объекта перетаскивания.

CView::OnDragScroll

Вызывается платформой перед вызовом OnDragEnter или OnDragOver определяет, находится ли точка в области прокрутки.

virtual DROPEFFECT OnDragScroll(
    DWORD dwKeyState,
    CPoint point);

Параметры

dwKeyState
Содержит состояние ключей модификатора. Это сочетание любого числа следующих значений: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTONи MK_RBUTTON.

point
Содержит расположение курсора в пикселях относительно экрана.

Возвращаемое значение

Значение из DROPEFFECT перечисленного типа, указывающее тип удаления, который будет возникать, если пользователь удал объект на этой позиции. Тип удаления обычно зависит от текущего состояния ключа, указанного dwKeyState. Стандартное сопоставление ключевых данных со DROPEFFECT значениями:

  • DROPEFFECT_NONE Объект данных нельзя удалить в этом окне.

  • DROPEFFECT_LINK Для MK_CONTROL|MK_SHIFT создания связи между объектом и сервером.

  • DROPEFFECT_COPY Для MK_CONTROL создания копии удаленного объекта.

  • DROPEFFECT_MOVE Для MK_ALT создания копии удаленного объекта и удаления исходного объекта.

  • DROPEFFECT_SCROLL Указывает, что операция прокрутки перетаскивания происходит или происходит в целевом представлении.

Дополнительные сведения см. в примере OCLIENTрасширенных концепций MFC.

Замечания

Переопределите эту функцию, если вы хотите предоставить специальное поведение для этого события. Реализация по умолчанию автоматически прокручивает окна при перетаскивании курсора в область прокрутки по умолчанию внутри границы каждого окна. Дополнительные сведения см. в статье OLE перетаскивания: реализация целевого объекта перетаскивания.

CView::OnDraw

Вызывается платформой для отрисовки изображения документа.

virtual void OnDraw(CDC* pDC) = 0;

Параметры

pDC
Указывает на контекст устройства, используемый для отрисовки изображения документа.

Замечания

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

Чтобы отобразить представление документа, необходимо переопределить эту функцию. Вы можете вызывать графический интерфейс устройства (GDI), используя объект, CDC на который указывает pDC параметр. Вы можете выбрать ресурсы GDI, такие как ручки или шрифты, в контекст устройства перед рисованием, а затем отменить их выбор. Часто код рисования может быть независимым от устройства; Т. е. не требуется информация о том, какой тип устройства отображает изображение.

Чтобы оптимизировать рисование, вызовите RectVisible функцию-член контекста устройства, чтобы узнать, будет ли нарисован заданный прямоугольник. Если необходимо различать обычный экран и печать, вызовите IsPrinting функцию-член контекста устройства.

CView::OnDrop

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

virtual BOOL OnDrop(
    COleDataObject* pDataObject,
    DROPEFFECT dropEffect,
    CPoint point);

Параметры

pDataObject
Указывает на COleDataObject то, что он удаляется в целевой объект удаления.

dropEffect
Эффект удаления, запрошенный пользователем.

  • DROPEFFECT_COPY Создает копию удаляемого объекта данных.

  • DROPEFFECT_MOVE Перемещает объект данных в текущее расположение мыши.

  • DROPEFFECT_LINK Создает связь между объектом данных и сервером.

point
Текущая позиция мыши относительно клиентской области представления.

Возвращаемое значение

Ненулевое значение, если падение было успешным; в противном случае — 0.

Замечания

Реализация по умолчанию ничего не делает и возвращает FALSE.

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

Примечание.

Платформа не вызывает эту функцию, если в этом классе представления есть переопределение OnDropEx .

CView::OnDropEx

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

virtual DROPEFFECT OnDropEx(
    COleDataObject* pDataObject,
    DROPEFFECT dropDefault,
    DROPEFFECT dropList,
    CPoint point);

Параметры

pDataObject
Указывает на COleDataObject то, что он удаляется в целевой объект удаления.

dropDefault
Эффект, выбранный пользователем для операции удаления по умолчанию на основе текущего состояния ключа. Он может иметь такое имя: DROPEFFECT_NONE. Эффекты удаления рассматриваются в разделе "Примечания".

dropList
Список эффектов удаления, поддерживаемых источником перетаскивания. Значения эффектов удаления можно объединить с помощью побитовой операции OR ( |). Эффекты удаления рассматриваются в разделе "Примечания".

point
Текущая позиция мыши относительно клиентской области представления.

Возвращаемое значение

Эффект удаления, который привел к попытке удаления в расположении, указанном в point. Это должно быть одно из значений, указанных в параметре dropEffectList. Эффекты удаления рассматриваются в разделе "Примечания".

Замечания

Реализация по умолчанию — не делать ничего и возвращать фиктивное значение (-1), указывающее, что платформа должна вызывать OnDrop обработчик.

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

Переопределение OnDropEx должно запрашивать правую кнопку мыши. Вы можете вызвать GetKeyState или сохранить правое состояние кнопки мыши от OnDragEnter обработчика.

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

    • Проверьте dropList , чтобы определить эффекты удаления, поддерживаемые источником удаления. Включите только эти действия во всплывающем меню.

    • Используется SetMenuDefaultItem для задания действия по умолчанию на основе dropDefault.

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

  • Если правая кнопка мыши не вниз, переопределение должно обрабатываться как стандартный запрос на удаление. Используйте эффект удаления, указанный в dropDefault. Кроме того, переопределение может возвращать фиктивное значение (-1), указывающее, что OnDrop будет обрабатывать эту операцию удаления.

Используется pDataObject для проверки COleDataObject формата данных буфера обмена и данных, отброшенных в указанной точке.

Эффекты удаления описывают действие, связанное с операцией удаления. См. следующий список эффектов удаления:

  • DROPEFFECT_NONE Удаление не допускается.

  • DROPEFFECT_COPY Операция копирования будет выполнена.

  • DROPEFFECT_MOVE Будет выполнена операция перемещения.

  • DROPEFFECT_LINK Будет установлена ссылка из удаленных данных на исходные данные.

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

Дополнительные сведения о настройке команды меню по умолчанию см SetMenuDefaultItem . в пакете SDK для Windows и CMenu::GetSafeHmenu в этом томе.

CView::OnEndPrinting

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

virtual void OnEndPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

Параметры

pDC
Указывает на контекст принтера.

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

Замечания

Реализация по умолчанию этой функции не выполняет никаких действий. Переопределите эту функцию, чтобы освободить все ресурсы GDI, выделенные в функции-члене OnBeginPrinting .

CView::OnEndPrintPreview

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

virtual void OnEndPrintPreview(
    CDC* pDC,
    CPrintInfo* pInfo,
    POINT point,
    CPreviewView* pView);

Параметры

pDC
Указывает на контекст принтера.

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

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

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

Замечания

Реализация этой функции по умолчанию вызывает OnEndPrinting функцию-член и восстанавливает основное окно кадра в состояние, в которое он был до начала предварительного просмотра печати. Переопределите эту функцию, чтобы выполнить специальную обработку при завершении режима предварительной версии. Например, если вы хотите сохранить положение пользователя в документе при переключении с режима предварительного просмотра на обычный режим отображения, прокрутите страницу до позиции, описанной point параметром, и m_nCurPage членом CPrintInfo структуры, на которую pInfo указывает параметр.

Всегда вызывайте версию OnEndPrintPreview базового класса из переопределения, обычно в конце функции.

CView::OnInitialUpdate

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

virtual void OnInitialUpdate();

Замечания

Реализация этой функции по умолчанию вызывает OnUpdate функцию-член без сведений о подсказке (то есть, используя значения по умолчанию 0 для lHint параметра и NULL параметра pHint ). Переопределите эту функцию для выполнения однократной инициализации, требующей сведений о документе. Например, если приложение имеет документы фиксированного размера, эту функцию можно использовать для инициализации ограничений прокрутки представления на основе размера документа. Если приложение поддерживает документы с переменным размером, используйте для OnUpdate обновления ограничений прокрутки при каждом изменении документа.

CView::OnPrepareDC

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

virtual void OnPrepareDC(
    CDC* pDC,
    CPrintInfo* pInfo = NULL);

Параметры

pDC
Указывает на контекст устройства, используемый для отрисовки изображения документа.

pInfo
Указывает на CPrintInfo структуру, описывающую текущее задание печати, если OnPrepareDC вызывается для печати или предварительного просмотра m_nCurPage . Элемент указывает страницу для печати. Этот параметр вызывается NULLOnPrepareDC для отображения экрана.

Замечания

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

Если функция вызывается для печати, реализация по умолчанию проверяет сведения о странице, хранящиеся в параметре pInfo . Если длина документа не указана, предполагается, OnPrepareDC что документ будет длиной одной страницы и останавливает цикл печати после печати одной страницы. Функция останавливает цикл печати, задав m_bContinuePrinting для элемента структуры значение FALSE.

Переопределите OnPrepareDC по любым из следующих причин:

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

  • Для выполнения разбиения на страницы во время печати. Обычно вы указываете длину документа при начале печати с помощью OnPreparePrinting функции-члена. Однако если вы заранее не знаете, сколько времени в документе (например, при печати неопределенного количества записей из базы данных) переопределите OnPrepareDC , чтобы проверить конец документа во время печати. Если для печати документа больше нет, задайте m_bContinuePrinting для элемента CPrintInfo структуры FALSEзначение .

  • Для отправки кодов escape-кода на принтер на основе страницы. Чтобы отправить коды escape-кода, OnPrepareDCвызовите Escape функцию-член pDC параметра.

Вызовите версию OnPrepareDC базового класса в начале переопределения.

Пример

void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
   CView::OnPrepareDC(pDC, pInfo);

   // If we are printing, set the mapmode and the window
   // extent properly, then set viewport extent. Use the
   // SetViewportOrg member function in the CDC class to
   // move the viewport origin to the center of the view.

   if (pDC->IsPrinting()) // Is the DC a printer DC.
   {
      CRect rect;
      GetClientRect(&rect);

      pDC->SetMapMode(MM_ISOTROPIC);
      CSize ptOldWinExt = pDC->SetWindowExt(1000, 1000);
      ASSERT(ptOldWinExt.cx != 0 && ptOldWinExt.cy != 0);
      CSize ptOldViewportExt = pDC->SetViewportExt(rect.Width(), -rect.Height());
      ASSERT(ptOldViewportExt.cx != 0 && ptOldViewportExt.cy != 0);
      CPoint ptOldOrigin = pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
   }
}

CView::OnPreparePrinting

Вызывается платформой перед печатью или предварительным просмотром документа.

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

Параметры

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

Возвращаемое значение

Ненулевое начало печати; Значение 0, если задание печати было отменено.

Замечания

Реализация по умолчанию не выполняет никаких действий.

Чтобы включить печать и предварительный просмотр, необходимо переопределить эту функцию. DoPreparePrinting Вызовите функцию-член, передавая его pInfo параметр, а затем возвращает возвращаемое значение; DoPreparePrinting отображает диалоговое окно "Печать" и создает контекст устройства принтера. Если вы хотите инициализировать диалоговое окно "Печать" со значениями, отличными от значений по умолчанию, назначьте значения членам pInfo. Например, если вы знаете длину документа, перед вызовом передайте значение значенияpInfo.DoPreparePrinting Это значение отображается в поле "To" в части диапазона диалогового окна "Печать".

DoPreparePrinting Не отображает диалоговое окно "Печать" для задания предварительного просмотра. Если вы хотите обойти диалоговое окно "Печать" для задания печати, проверка, что m_bPreview член pInfo являетсяFALSE, а затем установите его перед TRUE передачей DoPreparePrintingв ; сбросьте его FALSE до последующего сброса.

Если необходимо выполнить инициализацию, требующую доступа к CDC объекту, представляющего контекст устройства принтера (например, если необходимо знать размер страницы перед указанием длины документа), переопределите OnBeginPrinting функцию-член.

Если вы хотите задать значение m_nNumPreviewPages или члены pInfo параметра, сделайте это после вызоваDoPreparePrintingm_strPageDesc. Функция-член DoPreparePrinting задает m_nNumPreviewPages значение, найденное в приложении. INI-файл и задает m_strPageDesc значение по умолчанию.

Пример

Переопределите и вызов DoPreparePrinting из переопределенияOnPreparePrinting, чтобы платформа отображала диалоговое окно "Печать" и создавала для вас контроллер домена принтера.

BOOL CMyEditView::OnPreparePrinting(CPrintInfo* pInfo)
{
   return CEditView::DoPreparePrinting(pInfo);
}

Если вы знаете, сколько страниц содержит документ, задайте максимальную страницу OnPreparePrinting перед вызовом DoPreparePrinting. Платформа отобразит максимальный номер страницы в поле "to" диалогового окна "Печать".

BOOL CExampleView::OnPreparePrinting(CPrintInfo* pInfo)
{
   //The document has 2 pages.
   pInfo->SetMaxPage(2);
   return CView::DoPreparePrinting(pInfo);
}

CView::OnPrint

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

virtual void OnPrint(
    CDC* pDC,
    CPrintInfo* pInfo);

Параметры

pDC
Указывает на контекст принтера.

pInfo
Указывает на структуру CPrintInfo , описывающую текущее задание печати.

Замечания

Для каждой печатной страницы платформа вызывает эту функцию сразу после вызова OnPrepareDC функции-члена. Страница, на которой печатается, указывается m_nCurPage элементом CPrintInfo структуры, на которую pInfo указывает. Реализация по умолчанию вызывает OnDraw функцию-член и передает ей контекст устройства принтера.

Переопределите эту функцию по любым из следующих причин:

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

  • Чтобы сделать напечатанное изображение отличается от изображения экрана (т. е. если приложение не является WYSIWYG). Вместо передачи контекста устройства принтера используйте контекст OnDrawустройства для отрисовки изображения с помощью атрибутов, не отображаемых на экране.

    Если вам нужны ресурсы GDI для печати, которые не используются для отображения экрана, выберите их в контекст устройства перед рисованием и отмените их выбор. Эти ресурсы GDI должны быть выделены OnBeginPrinting и выпущены в OnEndPrinting.

  • Реализация верхних или нижних колонтитулов. Вы по-прежнему можете использовать OnDraw для отрисовки, ограничив область, на которую она может печатать.

Обратите внимание, что m_rectDraw член pInfo параметра описывает печатную область страницы в логических единицах.

Не OnPrepareDC вызывайте переопределение OnPrint; платформа автоматически вызывается OnPrepareDC перед вызовом OnPrint.

Пример

Ниже приведен скелет для переопределенной OnPrint функции:

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
   UNREFERENCED_PARAMETER(pInfo);

   // Print headers and/or footers, if desired.
   // Find portion of document corresponding to pInfo->m_nCurPage.
   OnDraw(pDC);
}

Еще один пример см. в разделе CRichEditView::PrintInsideRect.

CView::OnScroll

Вызывается платформой для определения возможности прокрутки.

virtual BOOL OnScroll(
    UINT nScrollCode,
    UINT nPos,
    BOOL bDoScroll = TRUE);

Параметры

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

  • SB_BOTTOM Прокручивается вниз.

  • SB_LINEDOWN Прокручивает одну строку вниз.

  • SB_LINEUP Прокручивает одну строку вверх.

  • SB_PAGEDOWN Прокручивает одну страницу вниз.

  • SB_PAGEUP Прокручивает одну страницу вверх.

  • SB_THUMBTRACK Перетащите поле прокрутки в указанное положение. Текущая позиция указана в nPos.

  • SB_TOP Прокручивается вверх.

nPos
Содержит текущую позицию прокрутки, если код полосы прокрутки имеет значение SB_THUMBTRACK; в противном случае он не используется. В зависимости от начального диапазона nPos прокрутки может быть отрицательным и должен быть приведение к int при необходимости.

bDoScroll
Определяет, следует ли выполнять указанное действие прокрутки. Если , то прокрутка должна происходить; еслиTRUEFALSE, то прокрутка не должна происходить.

Возвращаемое значение

Если bDoScroll есть TRUE и представление было прокручено, возвращается ненулевое значение; в противном случае — 0. Если bDoScroll это FALSEтак, возвращается значение, которое вы bDoScrollTRUEбы вернули, даже если бы вы на самом деле не делали прокрутку.

Замечания

В одном случае эта функция вызывается платформой с bDoScroll заданным значением TRUE , когда представление получает сообщение полосы прокрутки. В этом случае необходимо прокрутить представление. В другом случае эта функция вызывается с bDoScroll заданным значением FALSE , когда элемент OLE изначально перетаскивается в область автоматической прокрутки целевого объекта перетаскивания перед прокруткой. В этом случае не следует прокручивать представление.

CView::OnScrollBy

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

virtual BOOL OnScrollBy(
    CSize sizeScroll,
    BOOL bDoScroll = TRUE);

Параметры

sizeScroll
Число пикселей, прокручиваемых по горизонтали и по вертикали.

bDoScroll
Определяет, происходит ли прокрутка представления. Если происходит прокрутка; если TRUEFALSEпрокрутка не возникает.

Возвращаемое значение

Ненулевое значение, если представление могло быть прокручено; в противном случае — 0.

Замечания

В производных классах этот метод проверка, чтобы узнать, является ли представление прокручиваемым в направлении, которое пользователь запрашивал, а затем обновляет новый регион при необходимости. Эта функция автоматически вызывается CWnd::OnHScroll и CWnd::OnVScroll выполняет фактический запрос прокрутки.

Реализация этого метода по умолчанию не изменяет представление, но если оно не вызывается, представление не будет прокручиваться в производном CScrollViewклассе.

Если ширина документа или высота документа превышает 32767 пикселей, прокрутка за последние 32767 завершится ошибкой, так как OnScrollBy вызывается с недопустимым sizeScroll аргументом.

CView::OnUpdate

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

virtual void OnUpdate(
    CView* pSender,
    LPARAM lHint,
    CObject* pHint);

Параметры

pSender
Указывает на представление, изменяющее документ, или NULL если все представления должны быть обновлены.

lHint
Содержит сведения об изменениях.

pHint
Указывает на объект, в котором хранятся сведения об изменениях.

Замечания

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

Чтобы использовать lHint, определите специальные значения намека, обычно битовую маску или перечислимый тип, и документ передает одно из этих значений. Чтобы использовать pHint, наследуйте класс подсказки и CObject передайте указатель на объект подсказки. При переопределении OnUpdateиспользуйте CObject::IsKindOf функцию-член для определения типа объекта подсказки во время выполнения.

Как правило, вы не должны выполнять рисование непосредственно из OnUpdate. Вместо этого определите прямоугольник, описывающий координаты устройства, область, требующая обновления; передайте этот прямоугольник CWnd::InvalidateRectв . Это приводит к возникновению рисунка WM_PAINT при следующем получении сообщения.

Если lHint значение равно 0, pHintNULLдокумент отправил универсальное уведомление об обновлении. Если представление получает универсальное уведомление об обновлении или если оно не может декодировать подсказки, оно должно недействительным всей клиентской областью.

См. также

Пример MFC MDIDOCVW
CWnd Класса
Диаграмма иерархии
CWnd Класса
CFrameWnd Класса
CSplitterWnd Класса
CDC Класса
CDocTemplate Класса
CDocument Класса