Шаг 284 - Сообщения Windows

MFC как и Windows использует событийную модель программирования. Что это значит ? Когда мы писали программы под DOS, то сами обращались к оборудованию и ждали его реакции. Например, беспрерывно сканировали буфер клавиатуры ожидая ввода. Теперь все поменялось. С оборудованием работает Windows. А Ваша программа ждет когда она получит сообщение, естественно, тоже постоянно проверяя, но уже очередь сообщений. Это уже легче, так как нам не надо знать специфики обородувания. Нам не нужно знать какая мышь и как она работает, так как мы получим от всех мышей одно и тоже сообщение при нажатии, скажем, левой кнопки. MFC берет на себя все, что связано с обработкой сообщений и позволяет Вам легко ими управлять.

Каждое сообщение имеет свой числовой идентификатор, который определен с помощью #define, вот пример из WinUser.h, где определены сообщения мыши:

#define WM_LBUTTONDOWN                  0x0201
#define WM_LBUTTONUP                    0x0202
#define WM_LBUTTONDBLCLK                0x0203
#define WM_RBUTTONDOWN                  0x0204
#define WM_RBUTTONUP                    0x0205

Сообщения имеют префикс WM_ - это означает Windows Message или сообщение Windows. Как минимум бывает два типа сообщений.

Сообщение созданное пользователем начинается с префикса WM_USER, к которому прибавляется число. Вот так например:

#define WM_MYMESSAGE (WM_USER+1)

Microsoft рекомендует так использовать сообщения:

WM_USER-1		Сообщения, зарезервированные для использования Windows
WM_USER до 0x7FFF	Целочисленные сообщения для использования только окном классов
0x8000  до 0xBFFF	Сообщения для использования прикладными программами
0xC000  до 0xFFFF	Строковые сообщения для использования прикладными программами
>0xFFFF		Зарезервировано системой Windows для будущего использования

Само сообщение WM_USER определено как:

#define WM_USER      0x0400

Так же сообщения делятся на категории:

В MFC обрабатывать сообщения могут все объекты порожденные от CCmdTarget.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 15.11.2000