События и сообщения Windows

Опытный программист определенно заметит сходство некоторых событий C++Builder и сообщений Windows. В следующей таблице приведен краткий список событий объекта TForm и соответствующих сообщений Windows, которые вы использовали бы в обычной программе на языке С:

Событие VCL Сообщение Windows
OnCreate WM CREATE
OnClose WM DESTROY
OnReSize WM SIZE
OnActivate, OnDeactivate WMACTIVATE
OnShow, OnHide WM SHOWWINDOW
OnKeyDown WM KEYDOWN
OnKeyUp WM KEYUP
OnKeyDown WM KEYDOWN
OnMouseDown WM LBUTTONDOWN, WM RBUTTONDOWN
On Mouse Up WM LBUTTONUP,WM RBUTTONUP
OnMouseMove WMMOUSEMOVE
OnDblClkk WM LBUTTONDBLCLK, WMRBUTTONDBLCLK
OnPaint WM PAINT

He всякому сообщению Windows можно найти соответствующее событие VCL. Например, в обычной программе на языке С для Windows сообщение WM_COMMAND используется как для обслуживания нажатий на кнопки, так и выбора команд из меню. В C++Builder для этих целей используются разные события: TButton::OnClick и TMenuItem::OnCUck, соответственно.

С другой стороны, некоторые события VCL расширяют функциональность встроенных сообщений Windows. Так события OnDragOver и OnDragDrop Объекта TForm просто и прямолинейно реализуют операции перетаскивания (drag-and-drop) в вашей программе. Большинство компонент на вкладкахStandard и Win95Палитры компонент лишь специальным образом обрамляют известные элементы управления Windows. Компоненты на других вкладках представляют совершенно новые элементы управления (и события) для особых областей функционирования.

Компоненты вкладокStandard и Win95 инкапсулируют стандартные элементы управления Windows. За взаимодействие между пользователем и программой, которое ранее поддерживалось реакцией на сообщения Windows, теперь отвечают обработчики событий компонент VCL. Однако, в некоторых ситуациях возникает необходимость "взять на себя" те сообщения Windows, которые не имеют соответствующих событий VCL или не адекватны им. Для таких случаев в VCL предусмотрена методика ООП, обеспечивающая непосредственный отклик на события Windows, подобно средствам библиотек базовых классов OWL или MFC. Эта методика, реализуемая с помощью макросов BEGIN_MESSAGE_MAP, MESSAGE.HANDLER и END_MESSAGE_MAP, весьма трудоемка и здесь не рассматривается. Поэтому предварительно тщательно просмотрите имеющиеся в VCL компоненты, которые могут содержать подходящие события.

Наши рекомендации