Окно Б, получив ответ (сообщение WM_USER+2), выводит на экран текст при помощи фрагмента кода, приведенного в листинге 2.3.

Листинг 2.3

case WMJJSER+2:

MessageBox(hWnd."Получен ответ\п от окна А "."ОКНО Б".MB_T0PM0ST); break; Выведенное на экран окно MessageBox() может оказаться заслоненным основным окном другого приложения. Чтобы оно обязательно было видимым, в последнем параметре указан флаг MBJT0PM0ST. Если несколько сообщений с таким флагом выводятся на экран практически одновременно, окно, выведенное последним, оказывается сверху. Таким образом, использование параметра MBJT0PM0ST позволяет зафиксировать последовательность вывода сообщений MessageBox().

В обоих случаях (при щелчке левой и правой кнопкой) в окне программы Б операторы отправки сообщения и вывода текста Послали сообщение окну А следуют непосредственно друг за другом. Но порядок обмена (см. рис. 2.2) существенно различается.

При щелчке левой кнопкой поочередно выводятся четыре показанных слева текстовых окна:

1. После вызова функции SendMessage() выполнение оконной процедуры окна Б приостанавливается.

2. Окно А получает переданное функцией SendMessage() сообщение.

3. Оконная процедура окна А отправляет ответ окну Б.

4. Операционная система, не ожидая завершения оконной процедуры окна Б, запускает ее заново, передавая сообщение WMJJSER+2. Здесь необходимо вспомнить понятие реентерабельности. Функция называется реентерабельной, если ее выполнение разрешено временно прервать и вызвать ту же функцию повторно. В отличие от рекурсии, где функция сама организует повторный вызов, реентерабельная функция может быть прервана в случайный момент времени и в случайной точке под влиянием внешних факторов.

Обмен сообщениями

Оконная процедура программы А завершается, и только после этого функция SendMessage() окна Б возвращает управление и текст Послали сообщение окну А появляется на экране уже после завершения обмена.

5. Оконная процедура программы А завершается, и только после этого функция SendMessage() окна Б возвращает управление и текст Послали сообщение окну А появляется на экране уже после завершения обмена.

Текст заголовка этого окна формируется в программе при помощи фрагмента кода, который приведен в листинге 2.4.


⇐ Предыдущая| |Следующая ⇒