Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

         

Макрокоманда ON_WM_<name>


Обрабатывает стандартные сообщения операционной системы Windows. Вместо <name> указывается имя сообщения без префикса WM_. Так, например для обработки сообщения WM_SIZE предназначена макрокоманда ON_WM_SIZE.

Для обработки сообщений, определенных в таблице сообщений макрокомандами ON_WM_<name>, вызываются одноименные методы. Имя метода обработчика соответствует названию сообщения, без учета префикса WM_.

В классе CWnd определены обработчики для стандартных сообщений. Эти обработчики будут использоваться по умолчанию. Вот некоторые из таких методов.

Сообщение

Макрокоманда

Метод обработчик

WM_CHAR

ON_WM_CHAR()

afx_msg void

OnChar(UINT, UINT, UINT);

WM_CREATE

ON_WM_CREATE()

afx_msg int

OnCreate(LPCREATESTRUCT );

WM_HSCROLL

ON_WM_HSCROLL()

afx_msg void

OnHScroll(UINT, UINT, CWnd*);

WM_KEYDOWN

ON_WM_KEYDOWN()

afx_msg void

OnKeyDown(UINT, UINT, UINT);

WM_KEYUP

ON_WM_KEYUP()

afx_msg void

OnKeyUp(UINT, UINT, UINT);

WM_LBUTTONDOWN

ON_WM_LBUTTONDOWN()

afx_msg void

OnLButtonDown(UINT, CPoint);

WM_LBUTTONUP

ON_WM_LBUTTONUP()

afx_msg void

OnLButtonUp(UINT, CPoint);

WM_PAINT

ON_WM_PAINT()

afx_msg void

OnPaint();

WM_SIZE

ON_WM_SIZE()

afx_msg void

OnSize(UINT, int, int);

WM_TIMER

ON_WM_TIMER()

afx_msg void

OnTimer(UINT);

WM_VSCROLL

ON_WM_VSCROLL()

afx_msg void

OnVScroll(UINT, UINT, CWnd*);

Все методы-обработчики определены с ключевым словом afx_msg. Оно позволяет отличить эти методы от остальных методов класса. На этапе препроцессорной обработки ключевое слово afx_msg удаляется. Определение afx_msg вы можете найти в файле afxwin.h:

#define afx_msg

Макрокоманды ON_WM_<name> не имеют параметров. Однако методы, которые вызываются для обработки соответствующих сообщений, имеют параметры, количество и назначение которых зависит от обрабатываемого сообщения.

Когда вы определяете обработчик стандартного сообщения Windows в своем классе, он будет использоваться вместо обработчика определенного в классе CWnd (или другом базовом классе). В любом случае вы можете вызвать метод обработчик базового класса из своего метода обработчика.



Содержание раздела