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.