Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4

Кент Рейсдорф. BORLAND C++BUILDER. Страница 421

Чтобы извлечь необходимую информацию, сообщение должно быть рас­крыто (cracked, буквально — расколото). Код для обработки сообщения WMLBUTTONDOWN мог бы выглядеть следующим образом:

Это довольно простой пример, но он показывает то, что происходит при каждой обработке сообщения в приложении Windows.

Я рад вам сообщить, что для всех событий VCL сообщения раскрываются без вашего участия. Например, если вы пишете обработчик сообщения для события OnMouseDown, сгенерированная C++Builder функция будет выгля­деть следующим образом:

void fastcall TScratchPad::FormMouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, Integer X, Integer Y) {

// введите здесь свой код

}

Как видите, обработчик события, сгенерированный С+-l-Builder, содержит всю нужную вам информацию. VCL раскроет WPARAM и LPARAM и вручит вам по частям, чтобы вы могли сразу начать работу. То же самое происходит с каждым сообщением, для которогоVCL инициирует событие.

После этого небольшого введения в систему сообщений Windows, давайте рассмотрим, как же посылаются сообщения.

Отправление и пересылка

API Windows содержит две функции для посылки сообщений: PostMes- sage() и SendMessage(). Функция PostMessage() отправляет сообщение в оче­редь сообщений Windows и немедленно возвращает управление. Эта функция просто вручает сообщение Windows, после чего программа продолжает работу. PostMessage() возвращает 1, если вызов функции прошел успешно, и 0 в про­тивном случае. (Практически единственная причина, по которой PostMessage() может быть не выполнена — сообщение направлено недействительному окну.)

Функция SendMessage(), напротив, посылает сообщение Windows и не возвращает управление до тех пор, пока сообщение не будет доведено до получателя. Значение, возвращаемое SendMessage(), зависит от пересылаемого сообщения. Иногда основной причиной для использования SendMessage() вместо PostMessage() является необходимость получить возвращаемое значе­ние от конкретного сообщения.

Web-дизайн (с) 2010 All rights reserved