Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Включение обработчиков сообщений в описание класса

Читайте также:
  1. I. Организация класса.
  2. I. Психолого-педагогическая характеристика класса
  3. II. Описание митоза и мейоза
  4. III. Техническое описание
  5. VIII. ОПИСАНИЕ МАТЕРИАЛЬНО-ТЕХНИЧЕСКОГО ОБЕСПЕЧЕНИЯ ОБРАЗОВАТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ
  6. Анализ и описание семантики языковых средств, входящих в номинативное поле концепта.
  7. Анализ рисков реализации подпрограммы и описание мер управления рисками.

Каждое сообщение, явно обрабатываемое в программе, должно быть связано с одним из обработчиков. Обработчик - это член-функция класса, принимающего сообщения. Прототипы для обработчиков всех сообщений заранее заданы в MFC. Как правило, имя обработчика состоит из имени сообщения и префикса On. Например, обработчик сообщения WM_CHAR называется OnChar(), а для WM_LBUTTONDOWN - OnLButtonDown(). Последнее сообщение генерируется при нажатии левой кнопки мыши.

Например, объявим класс с обработчиком сообщения WM_PAINT. Это сообщение посылается окну, когда оно должно перерисовать свою клиентскую область.

Class CMainWin: public CFrameWnd { public: CMainWin(); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() }

Спецификатор afx_msg означает объявление обработчика сообщения. На данный момент он не используется и представляет собой пустой макрос. Но в будущем возможны расширения. Поэтому использование спецификатора нужно считать обязательным.

Для каждого обработчика должна быть описана его реализация. В ней могут производиться самые разные действия, которые требуются по логике работы программы.

Пример программы с обработкой сообщений

Рассмотрим программу, которая реагирует на нажатие левой и правой кнопок мыши в клиентской области окна, а также на нажатие клавиш. При нажатии левой кнопки в клиентскую область окна, начиная с текущих координат курсора мыши, выводится строка "Нажата левая кнопка", а при нажатии правой кнопки - "Нажата правая кнопка".

При нажатии на левую и правую кнопки соответственно генерируются сообщения WM_LBUTTONDOWN и WM_RBUTTONDOWN, и им соответствуют обработчики с прототипами:

afx_msg void OnLButtonDown(UINT Flags, CPoint Loc); afx_msg void OnRButtonDown(UINT Flags, CPoint Loc);

Первый параметр указывает на то, была ли при генерации сообщения нажата какая-нибудь клавиша или кнопка мыши. Этот параметр нас не будет пока интересовать. Второй параметр определяет координаты курсора мыши во момент нажатия кнопки. Класс CPoint порождается от структуры POINT, определенной так:

typedef struct tagPOINT { LONG x; LONG y; } POINT;

Таким образом, мы легко можем определить координаты для вывода текстовой строки.

Обработчик сообщения WM_CHAR имеет прототип:

afx_msg void OnChar(UINT Char, UINT Count, UINT Flags);

Нас здесь будет интересовать только первый параметр. Он представляет собой ASCII-код символа, соответствующего нажатой клавише. При нажатии несимвольных клавиш сообщение WM_CHAR не посылается.


Дата добавления: 2015-07-20; просмотров: 149 | Нарушение авторских прав


Читайте в этой же книге: История | Пример программы | Пример программы | ТЕМАТИКА РЕФЕРАТІВ | Методичні рекомендації щодо написання рефератів |
<== предыдущая страница | следующая страница ==>
Исходные тексты примера| Сообщение WM_PAINT

mybiblioteka.su - 2015-2024 год. (0.005 сек.)