Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Библиотека классов MFC



Библиотека классов Microsoft Foundation Classes (MFC) содержит более 200 уже написанных классов для Windows - программирования.

Функции классов MFC внутри себя вызывают функции библиотеки Windows Win32 API (1000 функций), т.е. можно сказать, что в MFC включен Win32 API. Преимущество MFC по сравнению с Win32 API заключаются в упрощении и ускорении разработки Windows-приложений.

Библиотека классов MFC имеет следующие преимущества:

- использует удобно внутри себя библиотеку Win 32 API;

- упрощает и ускоряет разработку Windows-приложений;

- создает компактность программного кода;

- сокращает время разработки графического интерфейса пользователя;

- значительно упрощает применение прогрессивных технологий программирования: технологии ActiveX, поддержку баз данных с технологиями ODBC и DAO; технологий для Internet.

Библиотека MFC – иерархическая совокупность классов C++, реализующая методы инкапсуляции, наследования и полиморфизма.

Классы MFC можно разделить на несколько категорий:

- структура приложения: классы приложения и поддержки потоков, маршрутизации команд, документов;

- пользовательский интерфейс: классы фреймов окон, блоков диалога и элементов управления;

- вывод данных: классы контекста устройства, графических объектов;

- наборы данных: классы массивов, списков;

- простые типы данных: классы точки, прямоугольника, строки, времени и даты;

- технология ActiveX: контейнерные и серверные классы для поддержки операций с составными документами;

- файлы и базы данных: классы файлов ввода-вывода, для доступа с технологиями ODBC и DAO;

- internet и сети: классы технологий WinInet API, Internet Server API, Windows Socket.

Библиотека MFC для идентификации переменных используют соглашение, называемое Венгерской нотацией (автор – венгерский программист Чарлз Симони). Имя переменной состоит из префикса (буквы, обозначающей тип переменной) и описательной части из одного или нескольких слов, причем каждое слово начинается с заглавной буквы. Например, n, i - целое число (тип int), l - длинный тип (long), d - число с двойной точностью (double), c - символьный тип (char), s - строковая переменная.

Рассмотрим структуру приложения (тип проекта Visual C++ Project MFC, шаблон MFC Application).

Базовая концепция MFC и AppWizard – это понятие “Документ - Представление”. Принято предположение, что любое приложение что-то имеет, что необходимо хранить на диске. Эту совокупность информации обозначили как Документ, а просмотр информации обозначили как Представление.

После выполнения 6 этапов настройки параметров проекта будут созданы следующие главные классы и файлы приложения, представленные в табл. 2.1.

Табл. 2.1.

Класс Имя класса Базовый класс Файлы
Документ CLab1_2Doc CDocument Lab1_2Doc.h Lab1_2Doc.cpp
Представление CLab1_2View CView Lab1_2View.h Lab1_2View.cpp
Главное окно CMainFrame CFrameWnd MainFrame.h MainFrame.cpp
Приложение CLab1_2App CWinApp Lab1_2.h Lab1_2.cpp

Appwizard создал 4 главных класса и на каждый класс - файл интерфейса и файл реализации. Класс Документ предназначен для хранения данных, записи и чтения их с диска. Класс Представление (или Вид) служит для отображения данных, вводимых пользователем, управляет окном представления (обработкой данных). Класс Главное окно управляет главным окном программы (окном-рамкой) и содержит рамку окна, строки заголовка, меню (за исключением клиентской области). Класс Приложение предназначен для управления программой в целом: запуска программы, инициализации, создания главного окна, передачи сообщений Windows.

5.4. Сообщения – реакция на события

Сообщение - это средство, с помощью которого операционная система сообщает приложению о произошедшем событии. Сообщения WINDOWSуправляют всем процессом функционирования приложений.

Окно, а каждый информационный элемент на экране есть окно, также может посылать сообщения другому окну.

Сообщение - это вход в приложение, представляет собой событие, на которое, должно реагировать приложение. Каждое сообщение связывается с конкретным окном, с каждым из которых, в свою очередь, связана собственная оконная функция. Эта функция вызывается для обработки сообщения. Механизм сообщений в WINDOWS реализуется при помощи очереди сообщений.

Для идентификации событий WINDOWS использует целые числа, но в тексте программы используются текстовые идентификаторы для удобства программирования и читабельности программы. Большое количество директив связывают символьные идентификаторы и соответствующие числа - # define <симв. идент.> <код >, например:

# define WM_PAINT 0X000F # define WM_COMMAND 0X0111

Существуют почти 900 различных сообщений.

Префиксы в имени сообщения указывают тип окна, для которого предназначено сообщение или которое его породило:

BM_,BN _ - кнопка (button), EM_,EN _ - текстовое поле (edit box), WM_ - окно как таковое (generic window).

Примеры сообщений с префиксом WM_:

WM_CHAR - нажатие видимых символов,

WM_KEYDOWN - нажатие невидимых символов (→,←, функциональные клавиши F1…F12).

Все сообщения в MFC разделены на основные категории:

1. Стандартные сообщения WINDOWS – это сообщения с префиксом WM _, за исключением WM_COMAND, информируют приложение о создании или уничтожении окна, о сообщениях клавиатуры и мыши, предназначены для обработки окнами, могут содержать параметры, которые определяют алгоритм обработки сообщения.

2. Командные сообщения (команды) – это сообщения WM_COMMAND, называемые командами, от объектов интерфейса пользователя, которые включают меню, кнопки панелей инструментов, клавиши-акселераторы.

3. Командные сообщения обновления пользовательского интерфейса – это сообщения, которые сообщают приложению об изменении состояния опций меню, кнопок панели инструментов, клавиш-акселераторов, например, сделать опции меню недоступными или помеченными.

4. Извещения элементов управления - это извещения от элементов управления и других дочерних окон, направляемые своему родительскому окну.

Сердцем любого приложения Windows является цикл обработки сообщений, находящийся в функции WinMain().

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

Но каким образом сопоставляются сообщение и соответствующая ему функция-обработчик? В традиционных Windows- программах для обработки сообщений используется в функции WndProc() оператор switch с многочисленными ветвями, что крайне не эффективно. В Visual C++ реализация взаимосвязи основана на понятии карты сообщения. Каждый класс, который получает сообщение, должен иметь свою карту сообщений.

Карта сообщений состоит из двух частей: одна в файле заголовков, другая - в файле кодов.

В первой части карты объявляется прототип функции-обработчика, например, для сообщения WM_CHAR – функция OnChar().

Вторая часть карты находится в файле кодов. Структура карты сообщений представляет собой набор макросов, называемых компонентами карты сообщений. Для каждого стандартного сообщения Windows (1-ая категория сообщений) определен свой макрос в форме: ON_ WM_XXX, где XXX -имя сообщения, например: ON_WM_CHAR.

Имена функций - обработчиков определяются при распаковке параметров каждого сообщения Windows на основе следующего простого соглашения. Имя функции-обработчика состоит из префикса On и имени соответствующего сообщения (без WM).

Например, afx_msg void OnChar(…) - это обработчик для сообщения WM_CHAR (нажата клавиша видимого символа). За формирование параметров функции-обработчика отвечает соответствующий макрос.

Для командных сообщений (2-ая категория сообщений) определен макрос в форме:

ON_COMMAND (Id, Fn), где Id - идентификатор командного сообщения, Fn -функция-обработчик. Пример:

ON_COMMAND (ID_FILE_PRINT, CView::OnFilePrint)

Для командных сообщений обновления пользовательского интерфейса (3-я категория сообщений) определен макрос:

ON_UPDATE_COMMAND_UI (Id, Fn)

Для обработки извещений от элементов управления (4-ая категория сообщений) определен макрос в форме:

ON_XXX (…), где XXX – название извещения.

Например, для обработки извещений, введенных программистом, применяются макросы ON_CONTROL и ON_ NOTIFY:

ON_CONTROL (cod, id, Fn)

, где cod – код извещения от элемента управления, id – идентификатор извещения, Fn – функция.

ON_NOTIFY - обработка извещения от элемента управления, содержащего дополнительные сведения.

ON_MESSAGE - обработка сообщений, созданных программистом.

Существует более 100 макросов, по одному на каждое сообщение, которые направляют сообщения функциям-обработчикам.





Дата публикования: 2014-11-26; Прочитано: 558 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...