388______________________________________________Глава 6

Второе сообщение, которое мы будем использовать — WM_ACTIVATE. Оно
посылается, когда окно переводится в активное или неактивное состояние. Снача-
ла сообщение посылается окну, переходящему в неактивное состояние, а потом —
активируемому.

Это сообщение определено следующим образом:

WM_ACTIVATE
fActive = LOWORD(wParam);

fMinimized = (BOOL) HIWORD(wParam);

hwndPrevious = (HWND) IParam;

Параметры этого сообщения означают следующее.

Параметр fActive показывает, как активируется или деактивируется окно.
Возможные значения параметра:

WA_ACTIVE        окно активируется не щелчком мыши (например, функ-
цией SetActiveWindow или клавиатурой)

WA_CLICKACTIVE  окно активируется щелчком мыши
WA_INACTIVE      окно деактивируется

Параметр fMinimized показывает, свернуто окно, или нет. Ненулевое значе-
ние соответствует свернутому окну.

Параметр hwndPrevious — это дескриптор, который указывает на окно, из ко-
торого фокус переключился на данное окно, если оно активируется, или на окно, в
которое передается управление, если данное окно деактивируется.

По умолчанию, если активируемое окно не свернуто, то оно получает фокус.
Если приложение обрабатывает это сообщение, то оно должно возвращать нуль.

6.3.2 Посылка сообщений

В API Windows определен ряд функций, позволяющих послать сообщение.

6.3.2.1 Функция SendMessage

Функция посылает указанное в ней сообщение окну или множеству окон и не!
возвращается, пока это сообщение обрабатывается. Этим она отличается от функ-
ции PostMessage, которая возвращается сразу после передачи сообщения.

Объявление функции:

Int SendMessage(HWnd hWnd, unsigned int Msg, WPARAM wParam,
LPARAM IParam);

Параметр hWnd — дескриптор окна, которому передается сообщение. Если
этот параметр равен HWND_BROADCAST, то сообщение передается всем окнам
верхнего уровня в системе, включая недоступные и невидимые, кроме дочерних.

Параметр Msg определяет передаваемое сообщение. Параметры wParam и IPa-
ram могут содержать дополнительную информацию. Значение, возвращаемое фун-
кцией, зависит от вида сообщения.

6.3.2.2 функция PostMessage

Эта функция похожа на SendMessage, но в отличие от нее она помещает сооб-
щение в очередь и сразу возвращается. Таким образом, PostMessage не годится
для передачи срочных сообщений, но зато она не блокирует вызвавшее приложе-
ние на время обработки сообщения приемником.

Объявление функции: