Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Библиотека классов 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!