Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10569 / 333 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 20:

Библиотека классов MFC среды проектирования Visual Studio .NET. SDI и MDI приложения

< Лекция 19 || Лекция 20: 123 || Лекция 21 >

Работа с отображениями

Классы отображений

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

Библиотека MFC, кроме класса Cview, предоставляет широкий набор классов отображения, наследуемых от CView, включая следующие классы:

  • CScrollView - для автоматической прокрутки и масштабирования отображения.
  • CFormView - для отображения форм, содержащих элементы управления. Объект CFormView создается на основе ресурса диалога.
  • CCtrlView - базовый класс для классов CEditView, CTreeView, CListView, CEditView и CRichEditView. Эти классы позволяют использовать архитектуру "документ-отображение" для некоторых элементов управления Windows.
  • CEditView - для отображения, реализующего свойства поля редактирования. Объект класса CEditView реализует работу простого текстового редактора.
  • CRichEditView - для отображения, содержащего объект CRichEditCtrl. Этот класс отображения реализует свойства окна редактирования и позволяет управлять форматированием текста.
  • CListView - для отображения, содержащего объект ClistCtrl.
  • CTreeView - для отображения, содержащего объект CtreeCtrl.
  • CHtmlView - для отображения, использующего WEB-браузер. Данный класс позволяет просматривать Internet-страницы и папки локальной файловой системы, а также может быть использован как контейнер для активного документа.
  • CRecordView и CDaoRecordView - для отображения форм, которые содержат элементы управления, связанные с полями объекта CRecordset или CDaoRecordset, что отображают таблицы баз данных.
  • COleDBRecordView - для отображения форм, которые содержат элементы управления, связанные с полями объекта CRowset. Этот класс применяется для доступа к данным средств OLE DB.
Реализация интерфейса пользователя

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

  • обработку сообщений Windows от мыши и от клавиатуры;
  • обработку выполнения пунктов меню, нажатия кнопок инструментария и клавиш-акселераторов.

Реализация интерфейса пользователя может включать в себя обработку:

  • определяемых пользователем пунктов меню;
  • пунктов меню, определяющих стандартные действия, такие как Edit|Copy, Edit|Cut и Edit|Paste.

MFC поддерживает реализацию трех типов интерфейса для отображения одного документа посредством нескольких отображений:

  • Отображение объектов одного класса в отдельных окнах документа (поддержка команды Window| New).

  • Отображение объектов одного класса в одном разделенном окне документа (поддержка команды Window|Split). Создается несколько объектов отображения одного класса.

  • Отображение объектов различных классов в одном окне документа.

Поддержка работы с разделенным окном реализована в классе CSplitterWnd.Разделенным окном является обычное окно, разбитое на несколько панелей (окон) и содержащее один и тот же документ.

Цикл жизни документа (а совместно с ним - и окна-рамки, и отображения) в MDI-приложении состоит из:

  1. вызова конструктора документа;
  2. вызова метода OnNewDocument или OnOpenDocument для каждого нового документа;
  3. отображения и обработки документа;
  4. удаления данных вызовом метода DeleteContents ;
  5. вызова деструктора документа.

Цикл жизни документа (а совместно с ним - и окна-рамки и отображения) в SDI-приложении отличается тем, что вызов конструктора происходит только один раз при первоначальном создании документа; аналогично и проходит вызов деструктора. А для каждого повторно создаваемого или открываемого документа выполняются только этапы 2-3-4.

Класс CView

Класс CView реализует основные возможности для работы с отображениями. Отношения между классом отображения, классом окна-рамки и классом документа устанавливаются объектом CDocTemplate. Вызов конструктора нового отображения и сопоставление его документу выполняется при открытии пользователем нового окна или при разделении существующего окна.

Один объект "отображение" может быть сопоставлен только одному документу, однако один документ может иметь несколько сопоставленных ему отображений.

Отображения обрабатывают сообщения, зафиксированные в таблице сообщений.

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

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

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

  1. объявить производный класс от Cview ;
  2. реализовать метод OnDraw, выполняющий отображение экрана или вывод на печать.

В классе View объявлены методы для реализации архитектуры "документ-отображение", включая следующие:

  • DoPreparePrinting - метод вызывается из переопределяемого метода OnPreparePrinting для отображения диалогового окна Print и создания контекста устройства принтера.
  • GetDocument - метод возвращает указатель на объект "документ", сопоставленный данному отображению, или NULL, если отображение не пристыковано ни к какому документу;
  • OnActivateView - метод вызывается при активации или деактивации отображения;
  • OnActivateFrame - метод вызывается при активации или деактивации окна-рамки, содержащего отображение;
  • OnUpdate - вызов этого метода инициируется при изменении отображения документа.
Класс CFormView

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

Для того чтобы использовать отображение CFormView, следует:

  1. разработать в редакторе ресурсов шаблон диалогового окна;
  2. создать класс отображения. Например:
    CMyFormView::CMyFormView() : 
      CFormView( CMyFormView::IDD );
  3. Переопределить метод OnUpdate ;
  4. реализовать методы, выполняющие внесение изменений из отображения в документ;
  5. сопоставить класс отображения с классом документа и окном-рамкой, используя шаблон документа.
< Лекция 19 || Лекция 20: 123 || Лекция 21 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

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

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Денис Комаров
Денис Комаров
Россия, Москва