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_.... это макрос для обработки сообщения.