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

Лабораторная работа №4

Обработка сообщений

Цель работы: изучение технологии программирования обработки сообщений в среде Visual C++.

Задание

1. Изучить материал, изложенный в разделе "Учебная информация".

2. Разработать SDI-приложение под именем MESSXX, где XX – номер варианта. Добавить 2 диалоговых окна, в каждом из которых реализовать одно из заданий, содержащихся в файле Var04.doc. Для открытия диалоговых окон добавить в SDI-окно меню "Задание" с выпадающим меню, содержащим пункты "Задание 1" и "Задание 2", которые открывают соответствующие диалоговые окна.

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

Учебная информация

Обработка сообщений является основным принципом управления приложением в Window. При работе с приложением происходят различные события: нажатие клавиш на клавиатуре или кнопок мыши, открытие окон и многие другие. При этом посылается сообщение о том, что что-то произошло. Сообщения могут передаваться от одного окна к другому (обычно от дочернего к родительскому), например, от кнопки (элементы управления являются миниатюрными окнами) к диалоговому окну, в котором она расположена. В сообщении содержится информация кому оно предназначено.

Список допустимых сообщений в окне ClassWizard зависит от выбранного объекта. Например, для класса окна представления он содержит более 60 сообщений, а для пункта меню – всего два: COMMAND и UPDATE_COMMAND_UI. Ниже в таблице приведены лишь некоторые часто используемые сообщения. Объекты классов CSDIView и CDlg в таблице соответственно обозначают окно представления в SDI-приложении и диалоговое окно. Префикс WM во многих сообщениях означает Window Message - сообщение окну.

Объект

Сообщение

Момент возникновения

CSDIView

OnInitialUpdate

При открытии окна представления

CSDIView, CDlg

WM_CREATE

После создания окна

CSDIView, CDlg

WM_LBUTTONDOWN

При нажатии левой кнопки мыши в рабочей области окна

CSDIView, CDlg

WM_PAINT

При выполнении метода Invalidate()

CSDIView, CDlg

WM_RBUTTONDOWN

При нажатии правой кнопки мыши в рабочей области окна

CSDIView, CDlg

WM_SIZE

При изменении размеров окна

CSDIView, CDlg

WM_TIMER

При срабатывании таймера

CDlg

WM_DESTROY

При уничтожении окна

CDlg

WM_INITDIALOG

Перед открытием диалогового окна

Кнопка

WM_CLICKED

При щелчке мышью

Кнопка

WM_DOUBLECLICKED

При двойном щелчке мышью

Пункт меню

COMMAND

При выборе пункта меню

Для указания, каким обработчиком будет обрабатываться сообщение, в MFC-приложениях используется карта сообщений. Карта сообщений состоит из двух частей: одна – в заголовочном файле класса (.h); другая – в соответствующем файле реализации (.cpp).

В заголовочном файле производится объявление карты сообщений при помощи макроса DECLARE_MESSAGE_MAP().

В файле реализации описывается сама карта сообщений, например:

BEGIN_MESSAGE_MAP(CSDIView, CView)

//{{AFX_MSG_MAP(CSDIView)

ON_COMMAND(ID_1, On1)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

Здесь BEGIN_MESSAGE_MAP и END_MESSAGE_MAP – макросы, ограничивающие область карты сообщений; ON_COMMAND(ID_1, On1) – макрос, направляющий обработку сообщения от объекта ID_1 (это пункт меню) функции-обработчику с именем On1.

Мастер ClassWizard автоматизирует добавление в проект указанных выше макросов и функций-обработчиков сообщений. От программиста требуется:

  • понимать, каким событием и сообщением воспользоваться для решения своей задачи, поскольку сообщения передаются от разных объектов и в различные моменты времени;

  • знать, в какой класс добавить функцию-обработчик сообщения;

  • подготовить и добавить код обработки в заготовку обработчика сообщения, созданную мастером ClassWizard.

Соседние файлы в папке ВУМИП_ЗО