Visual C++. Описание стандартных классов
Страница 25.


 
CView
Класс CView обеспечивает основные функциональные возможности определяемых пользователем классов представления. Класс представления ассоциирован с классом документа и осуществляет интерфейс между документом и пользователем: класс представления реализует отображение документа на экране или принтере, а также передает информацию о реакции пользователя в документ.
Класс представления является производным от класса CWnd. Одна и та же рабочая область окна может совместно использоваться несколькими классами представления. Связь между классом представления и классом окна осуществляется в шаблоне документа. Когда пользователь открывает новое окно или разбивает существующее, шаблон документа создает новый класс представления и присоединяет это к документу.
Класс представления может быть присоединен только к одному документу, но к одному документу могут быть присоединены несколько классов представления. Эта ситуация может возникнуть при отображении документа в разделенном окне или в нескольких дочерних окнах в многооконного приложения (MDI). Приложение может поддерживать несколько различных классов представления, соответствующих одному и тому же классу документа. Например, программа обработки текстов могла бы обеспечивать как просмотр текста документа, так и просмотр его иерархической структуры, в котором содержатся только заголовки разделов. Эти различные классы представления могут выводить информацию в различные окна или в различные панели разделенного окна, если окно открыто в этом режиме.
Класс представления может получать информацию от пользователя через различные устройства, например, с клавиатуры, через щелчки и перемещения мыши, из команд меню, инструментальных панелей или полос прокрутки. Сообщения в данный класс поступают из связанного с ним окна. Если класс представления не обрабатывает данную команду, он передает ее связанному с ним классу документа. Для сопоставления идентификатору сообщения функции его обработки класс представления использует карту сообщений.
Класс представления осуществляет только отображение и изменение данных в документе, но не хранит эти изменения. Вся отображаемая на экране информация содержится в классе документа. Класс представления может непосредственно обращаться к данным, хранящимся в документе, если в последнем предусмотрены методы для доступа к этим данным.
После внесения изменений в документ класс представления, производящий данную операцию, обычно вызывает функцию CDocument::UpdateAllViews, посылающую другим классам просмотра, связанным с данным документом, сообщение о том, что в документ внесены изменения и классам просмотра необходимо обновить выводимую ими информацию. Эти сообщения обрабатываются функцией OnUpdate соответствующего класса просмотра.
Обычно, для вывода информации на экран используется функция CView::OnDraw. Эту функцию можно использовать, также, для осуществления предварительного просмотра печати и самой печати. Реализация цикла печати и предварительного просмотра документа возложена на приложение.
Описание данного класса содержится в файле заголовка afxwin.h.
Данный класс используется во многих демонстрационных приложениях, описанных в данной книге. Наиболее полное его описание приведено в главах 2 и 10.
DoPreparePrinting
BOOL DoPreparePrinting(CPrintInfo* pInfo);
Возвращаемое значение
Ненулевое, если может начаться процесс печати или предварительного просмотра печати. Нулевое, если выполнение операции было прервано.
Аргументы
"sectiontableheader"pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.
Описание
Данная функция вызывается из перегруженной функции OnPreparePrinting для вызова диалогового окна Печать и создания контекста устройства принтера. Операции, выполняемые данной функцией зависят от того, был ли вызван режим печати или режим предварительного просмотра печати (определяется значением переменной m_bPreview, являющейся членом класса CPrintInfo, на объект которого указывает аргумент pInfo). Если производится распечатка файла, данная функция выводит диалоговое окно Печать, используя значения переменных объекта класса CPrintInfo, на который указывает аргумент pInfo. После закрытия диалогового окна функция DoPreparePrinting создает объект класса контекста устройства принтера, основываясь на значениях переменных аргумента pInfo, хранящих установки пользователя в диалоговом окне Печать. Этот контекст устройства используется для печати документа. Если функция вызывается в режиме предварительного просмотра печати, данная функция создает контекст устройства принтера, основываясь на его текущих установках. Контекст устройства используется для имитации принтера в процессе предварительного просмотра.
GetDocument
CDocument* GetDocument() const;
Возвращаемое значение
Указатель на объект класса CDocument, связанный с данным классом представления или NULL, если с данным классом не связан никакой документ.
Описание
Данная функция вызывается для того, чтобы получить указатель на документ, связанный с данным классом представления. Это позволяет получить данному классу доступ к методам класса документа.
OnBeginPrinting
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
Аргументы
"sectiontableheader"pDC - указатель на объект класса контекста устройства принтера.
"sectiontableheader"pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.
Описание
Данная функция вызывается приложением при инициализации процесса печати или предварительного просмотра печати после вызова функции OnPreparePrinting. По умолчанию эта функция не выполняет никаких операций. Перегрузка данной функции позволяет включить в контекст устройства любые ресурсы GDI такие, как перья или шрифты, необходимые для осуществления процесса печати. Выбор объектов GDI в контекст устройства производится в функции OnPrint отдельно для каждой страницы. Если одни и те же объекты класса представления используются для вывода изображения на экран и для его печати, используйте различные идентификаторы для ресурсов GDI, используемых в каждом из этих режимов. Это позволит обновлять экран в процессе печати документа. Функция OnBeginPrinting может использоваться, также и для инициализации величин, зависящих от параметров используемого принтера. Например, количество страниц, необходимое для печати документа может зависеть от установок, которые сделал пользователь в диалоговом окне Настройка принтера (таких, как размер страницы). В этом случае размер документа не может быть определен в функции OnPreparePrinting, в которой недоступна вся необходимая для этого информация, содержащаяся в объекте класса контекста устройства принтера, создаваемого на основании информации, полученной из диалогового окна Настройка принтера. Функция OnBeginPrinting является первой перегружаемой функцией, имеющей доступ к объекту класса CDC, представляющего контекст устройства принтера. Поэтому размер документа может быть определен в этой функции. Если размер документа не будет определен в этой функции, в окне предварительного просмотра печати не появится полоса прокрутки.
OnDraw
virtual void OnDraw(CDC* pDC) = 0;
Аргументы
"sectiontableheader"pDC - указатель на объект класса контекста устройства, используемого для отображения информации, хранящейся в документе.
Описание
Данная функция вызывается приложением для отображения информации, хранящейся в документе. Приложение вызывает данную функцию, чтобы вывести изображение на экран, на печать или на предварительный просмотр печати. В каждом из этих случаев передаются указатель на объект класса контекста устройства, используемый в данном конкретном случае. Данная функция не имеет реализации по умолчанию. Данная функция должна перегружаться в каждом пользовательском классе представления. Передаваемый в качестве параметра функции объект класса CDC позволяет функции получить доступ к таким ресурсам GDI, как перья, шрифты и кисти. Вызов функции CDC::RectVisible позволяет сократить объем вычислений при рисовании за счет отказа от рисования невидимых участков изображения. Значение, возвращаемое функцией CDC::IsPrinting, позволяет определить, будет ли данное изображение выводиться на принтер.
OnEndPrinting
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
Аргументы
"sectiontableheader"pDC - указатель на контекст устройства принтера.
"sectiontableheader"pInfo - указатель на объект класса CPrintInfo, содержащий описание данной работы.
Описание
Данная функция вызывается приложением после завершения процесса печати или предварительного просмотра документа. Версия данной функции, используемая по умолчанию, не выполняет никаких действий. Перегрузка этой функции производится для освобождения ресурсов GDI, выделенных в функции OnBeginPrinting.
 
« Предыдущая статья   Следующая статья »