Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КЛ_ТехнолПрогр2010_090103.doc
Скачиваний:
25
Добавлен:
27.04.2019
Размер:
1.35 Mб
Скачать

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

Сообщение - это средство, с помощью которого операционная система сообщает приложению о произошедшем событии. Сообщения 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 макросов, по одному на каждое сообщение, которые направляют сообщения функциям-обработчикам.

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

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

На основе объектно-ориентированного подхода были созданы среды программирования, например Delphi, C++ Builder, Visual C++ и др., реализующие визуальное программирование.

Существуют различные способы программирования для Windows. Возможен способ программирования вручную с использованием библиотеки Windows Win32 API, содержащей 1000 функций. Однако, такой способ исключительно трудоемок, т.к. появляется много рутинной работы программиста, приходится программировать многие общие функции, WinMain, InitInstance, а также функции-обработчики, имеющие стандартные каркасы.

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

- библиотека классов Microsoft Foundation Classes (MFC), содержащая много стандартных задач для Windows-программирования;

- генератор приложений с набором разнообразных мастер- блоков Wizard, позволяющий генерировать программные коды различных типов приложений Windows;

- интегрированная среда разработки Microsoft Visual Studio, выполняющая создание, просмотр и редактирование файлов и проектов, формирование графического интерфейса приложения.

Технология визуального программирования будет рассмотрена в теме 10 на примере информационной системы управления.

Контрольные вопросы

  1. Какие языки и методы программирования Вы знаете?

  2. Чем достигается высокий уровень создания Windows- приложений на объектно-ориентированном языке Visual C++?

  3. Чем отличаются модели программирования в MS-DOS и в Windows?

  4. В чем преимущества использования библиотеки классов MFC?

  5. Какие типы приложений имеются в Visual C++ ?

  6. Перечислите этапы работы приложений.

  7. В чем сущность сообщений?

  8. Каким образом сопоставляются сообщения и функции- обработчики?