Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.02.2016
Размер:
544.77 Кб
Скачать

3 Базовые классы библиотеки mfc

Система Microsoft Windows была разработана до того времени, когда идея объектно-ориентированного программирования нашла свое отражение в языке C++. Приложения на языке С реализовывались с применением функций программного интерфейса, называемых иногда функциями API. Однако идеи объектно-ориентированного программирования требуют и наличия средств, позволяющих, с одной стороны, программировать в терминах классов, а с другой - сохранить возможность использования в приложениях функций API. Именно такой объектно-ориентированный интерфейс для Windows обеспечивает библиотека классов MFC (Microsoft Foundation Classes), входящая в состав пакета Visual C++.

Эта библиотека классов позволяет:

  • Значительно сократить усилия по написанию программного кода приложений Windows;

  • Уменьшить размер программного кода;

  • Обрабатывать сообщения непосредственно методами класса без программирования цикла обработки сообщений;

  • Выполнять непосредственный вызов любой функции Windows С;

  • Легко преобразовывать существующие Си-приложения в приложения на языке C++;

  • Использовать все функции Windows API;

  • Легче адаптировать приложения к различным платформам, использовать как статически, так и динамически подключаемые библиотеки MFC;

  • Значительно упростить применение таких возможностей, как элементы управления OLE, работа с базами данных, средства печати, управление наборами инструментария;

  • Более эффективно использовать объектно-ориентированность языка C++.

Можно сказать, что MFC инкапсулирует функции API в форме C++. Эта библиотека классов позволяет работать в терминах различных элементов Windows, таких, как окна, диалоги, элементы управления, а также в терминах графического интерфейса: контекст устройства, кисть и перо.

Библиотека MFC создана как иерархический набор классов, позволяющих реализовывать Windows-приложения различных типов: диалоги, приложения с SDI или MDI интерфейсом, приложения, поддерживающие paботу с базами данных, OLE-приложения.

Базовым классом большинства классов библиотеки является класс CObject. В этом классе инкапсулированы общие методы работы с объектами: использование дампа объектов класса при отладке приложения, доступ к информации о классе объекта времени выполнения, сохранение и восстановление объектов класса.

Большую часть библиотеки составляют классы, наследуемые от CObject и реализующие архитектуру приложения: CWinThread, CWinApp, CDocTemplate, CDocument, CFrameWnd, CView и др.

Классы, реализующие графический интерфейс пользователя также наследуемы от CObject: CDC, CGdiObject.

Методы класса, предназначенные для обработки сообщений, начинаются с префикса On.

Класс cObject

Класс CObject предоставляет следующие базовые возможности:

  • поддержку сериализации данных (сохранение и восстановление);

  • информацию о классе времени выполнения;

  • вывод диагностики об объекте класса.

При множественном наследовании производный класс может иметь только один базовый класс CObject и при этом он должен быть первым в иерархии наследуемых базовых классов (самым левым). Также допускается создание производных классов, не имеющих CObject в качестве базового класса.

Для использования возможностей класса CObject при реализации и объявлении наследуемого класса следует применять:

  • макросы первого уровня DECLARE_DYNAMIC IMPLEMENTDYNAMIC, обеспечивающие доступ времени выполнения к имени класса и его позиции в иерархии классов и позволяющие получать дамп класса;

  • макросы второго уровня DECLARE_SERIAL и IMPLEMENT_SERIAL, включающие как все возможности, предоставляемые макросами первого уровня, так и сериализацию объектов класса.

Для того чтобы объекты класса предоставляли перечисленные возможности, следует при объявлении класса в заголовочном файле с расширением (.Н) указать соответствующий макрос.

Макрос DECLARE_DYNAMIC (class_name) предоставляет возможность наследуемому от CObject классу доступ к информации времени выполнения об объектах класса. Параметр class_name указывает имя класса.

Если при объявлении класса были использованы макросы DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC, то можно использовать макрос RUNTIME_CLASS и метод CObject: :IsKindOf для определения класса объекта во время выполнения приложения.

Отметим, что если при объявлении класса указан макрос DECLARE_DYNAMIC, то в реализации класса должен быть указан макрос IMPLEMENT_DYNAMIC.

Макрос IMPLEMENT_DYNAMIC (classjname, base_class_name) имеет два параметра: class_name - имя класса - и base_class_name - имя базового класса.

Макрос RUNTIME_CLASS (class_name) обеспечивает доступ к структуре класса во время выполнения приложения по имени класса.

RUNTIME_CLASS возвращает указатель на структуру CRuntimeClass, описывающую класс с указанным параметром class_name именем.

Отметим, что указатель на структуру CRuntimeClass может быть получен только для классов, наследуемых от CObject и использующих один из следующих макросов: DECLARE_DYNAMIC, DECLARE_DYNCREATE или DECLARE_SERIAL.

Макрос DECLARE_SERIAL (class_name) позволяет выполнять сериализацию объектов класса - запись содержания объекта в файл и чтение его из файла.

Отметим, что если при объявлении класса указан макрос DECLARE_SERIAL, то в реализации класса должен быть указан макрос IMPLEMENT_SERIAL.

Макрос IMPLEMENT_SERIAL (class_name, base_class_name, wSchema) имеет три параметра. Параметр wSchema указывает номер версии, используемой идентификации и управления данными, созданными более ранними версиями программы (это значение на может быть равным -1).

Соседние файлы в папке VC++Баженова