www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 75 - Команды и сообщения

Windows от DOS отличается многими вещами. Но одно из отличий это наличие в Windows сообщений. Если в Dos программа сама должна была опрашивать все устройтсва, например, мышь и клавиатуру, то в Windows это делает операционная система и передает программе (окну) сообщения. Забота программиста обработать эти сообщения и его уже не заботит, как они получены. В Windows с устройствами работают драйвера вертуальных устройств VXD. Их функционирование забота производителя. Вам уже не надо считывать буфер клавиатуры или перехватывать прерывания мышки. Ваша программа просто ждет когда её известят о событии. Известят сообщением.

Обычное программирование на C для Windows превращается в сплошную обработку операторов switch. MFC берет на себя всю черную работу позволяя Вам сконцентрироваться на обработке.

Идентификация сообщений в MFC производиться целыми числами с использованием define. Вот часть файла Winuser.h с определением сообщений.

....
#define WM_MOUSEFIRST                   0x0200
#define WM_MOUSEMOVE                    0x0200
#define WM_LBUTTONDOWN                  0x0201
#define WM_LBUTTONUP                    0x0202
#define WM_LBUTTONDBLCLK                0x0203
#define WM_RBUTTONDOWN                  0x0204
....
Как видите сообщения поступающие от Windows имеют префикс WM_.

В MFC для обработки сообщений принято использование карты сообщений Message Map. Эту карту сообщений имеют все классы порожденные от CCmdTarget. И не просто имеют, а должны иметь обязательно.

Карта сообщений описывается в заголовочном файле с описанием класса отвественного за её обработку.

....
// Описание функций откликов на сообщения
//  Generate message map function
// {{AFX_MSG(CMyDialog)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
...........
//}}AFX_MSG
// Декларация наличия карты обработки сообщения
DECLARE_MESSAGE_MAP()
И в файле реализации связывая сообщение с непосредсвенной функцией, которая будет выполняться по его поступлению.
BEGIN_MESSAGE_MAP((CMyDialog,CDialog)
//{{AFX_MSG_MAP(CMyDialog)
 .....
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_BN_CLICKED(IDC_EDIT,OnEdit)
 ....... 
//}}AFX_MSG
END_MESSAGE_MAP()
Коментарии AFX_MSG позволяют ClassWizard быстро ориентироваться в карте обработки для вставки сообщений. ON_WM_.... это макрос для обработки сообщения.


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz