- •3 Базовые классы библиотеки mfc
- •Класс cObject
- •Методы и переменные класса cObject
- •Класс cWinApp
- •IpszResourceName - указатель на строку, содержащую имя ресурса пиктограммы. (Тип параметра также может быть cString.) nIdResource - id ресурса пиктограммы.
- •Методы - обработчики сообщений
- •Класс cWnd
- •Методы инициализации
- •Методы управления состоянием окна
- •Управление размером и положением окна
- •Методы управления доступом
- •Методы обновления и перерисовки окна
- •IpRectUpdate - структура rect, определяющая координаты обновляемой прямоугольной области. Данный параметр игнорируется, если prgnUpdate содержит ненулевой указатель области.
- •Методы преобразования координат
- •Методы работы с текстом окна
- •Методы управления линейкой прокрутки
- •Методы управления курсором ввода
- •Методы управления элементами диалогового окна
- •IpString - указатель на буфер, содержащий выбранную строку списка.
- •IpStr - указатель на буфер, в который заносится текст или заголовок элемента управления.
- •Методы работы с меню
- •Методы управления таймером
- •Предупреждающие методы
- •Методы управления сообщениями
- •Переопределяемые методы
- •Методы, вызываемые для обработки сообщений
- •IpCreateStruct - структура createstruct, содержащая информацию о создаваемом объекте cWnd.
- •Класс cFile
- •Члены класса
- •IpszFileName - строка, указывающая в кодировке Windows абсолютный или относительный путь к имени файла. Не может содержать сетевого имени.
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).