Класс 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 .
Иерархия наследования
CView
Требования
Заголовок: afxwin.h
CView::CView
Формирует объект CView
.
CView();
Замечания
Платформа вызывает конструктор при создании нового окна фрейма или разделения окна. Переопределите функцию-член, OnInitialUpdate
чтобы инициализировать представление после присоединения документа.
CView::DoPreparePrinting
Вызовите эту функцию из переопределения OnPreparePrinting
, чтобы вызвать диалоговое окно "Печать" и создать контекст устройства принтера.
BOOL DoPreparePrinting(CPrintInfo* pInfo);
Параметры
pInfo
Указывает на структуру CPrintInfo
, описывающую текущее задание печати.
Возвращаемое значение
Ненулевое значение, если печать или предварительный просмотр могут начаться; Значение 0, если операция отменена.
Замечания
Поведение этой функции зависит от того, вызывается ли он для печати или предварительного просмотра (указанный m_bPreview
pInfo
членом параметра). Если файл печатается, эта функция вызывает диалоговое окно "Печать", используя значения в 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
. Элемент указывает страницу для печати. Этот параметр вызывается NULL
OnPrepareDC
для отображения экрана.
Замечания
Реализация этой функции по умолчанию ничего не делает, если функция вызывается для отображения экрана. Однако эта функция переопределяется в производных классах, например 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
параметра, сделайте это после вызоваDoPreparePrinting
m_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
Определяет, следует ли выполнять указанное действие прокрутки. Если , то прокрутка должна происходить; еслиTRUE
FALSE
, то прокрутка не должна происходить.
Возвращаемое значение
Если bDoScroll
есть TRUE
и представление было прокручено, возвращается ненулевое значение; в противном случае — 0. Если bDoScroll
это FALSE
так, возвращается значение, которое вы bDoScroll
TRUE
бы вернули, даже если бы вы на самом деле не делали прокрутку.
Замечания
В одном случае эта функция вызывается платформой с bDoScroll
заданным значением TRUE
, когда представление получает сообщение полосы прокрутки. В этом случае необходимо прокрутить представление. В другом случае эта функция вызывается с bDoScroll
заданным значением FALSE
, когда элемент OLE изначально перетаскивается в область автоматической прокрутки целевого объекта перетаскивания перед прокруткой. В этом случае не следует прокручивать представление.
CView::OnScrollBy
Вызывается платформой, когда пользователь просматривает область за пределами текущего представления документа, перетаскивая элемент OLE к текущим границам представления или управляя вертикальными или горизонтальными полосами прокрутки.
virtual BOOL OnScrollBy(
CSize sizeScroll,
BOOL bDoScroll = TRUE);
Параметры
sizeScroll
Число пикселей, прокручиваемых по горизонтали и по вертикали.
bDoScroll
Определяет, происходит ли прокрутка представления. Если происходит прокрутка; если TRUE
FALSE
прокрутка не возникает.
Возвращаемое значение
Ненулевое значение, если представление могло быть прокручено; в противном случае — 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, pHint
NULL
документ отправил универсальное уведомление об обновлении. Если представление получает универсальное уведомление об обновлении или если оно не может декодировать подсказки, оно должно недействительным всей клиентской областью.
См. также
Пример MFC MDIDOCVW
CWnd
Класс
Диаграмма иерархии
CWnd
Класс
CFrameWnd
Класс
CSplitterWnd
Класс
CDC
Класс
CDocTemplate
Класс
CDocument
Класс