Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Операционная система Windows 95 для программиста

© Александр Фролов, Григорий Фролов
Том 22, М.: Диалог-МИФИ, 1993, 271 стр.

[Назад] [Содеожание] [Дальше]

6.2. Обработка извещений

Когда пользователь нажимает кнопки OK, Cancel или Help, расположенные в нижней части окна блокнота или кнопки Back, Next или Finish, расположенные в нижней части окна органа управления Wizard, функция диалога текущей страницы получает сообщение WM_NOTIFY . Код извещения передается через поле code структуры NMHDR , адрес которой находится в параметре lParam сообщения WM_NOTIFY.

Для органов управления Propery Sheet и Wizard определены следующие коды извещений:

Код извещения Описание
PSN_SETACTIVE Это извещение передается функции диалога, когда активизируется соответствующая страница блокнота или органа управления Wizard. Обработчик извещения может выполнить все необходимые инициализирующие действия
PSN_KILLACTIVE Страница отодвигается на задний план или удаляется с экрана. Обработчик этого извещения может проверить введенные пользователем значения и если они неправильны, заблокировать переключение на другие страницы блокнота
PSN_APPLY Это извещение посылается когда пользователь нажимает кнопку OK или Apply
PSN_HELP Извещение PSN_HELP посылается когда пользователь нажимает кнопку Help
PSN_QUERYCANCEL Извещение PSN_QUERYCANCEL посылается когда пользователь нажимает кнопку Cancel, собираясь закрыть блокнот. Обработчик может запретить это действие, например, если пользователь не указал какие-либо необходимые параметры
PSN_RESET Это извещение посылается вслед за извещением PSN_QUERYCANCEL, если обработчик последнего не запретил закрытие блокнота
PSN_WIZBACK Посылается, когда пользователь нажал кнопку Back в органе управления Wizard
PSN_WIZNEXT Посылается, когда пользователь нажал кнопку Next в органе управления Wizard
PSN_WIZFINISH Посылается, когда пользователь нажал кнопку Finish в органе управления Wizard

Обработчики извещений могут возвращать значение FALSE или TRUE, однако в большинстве случаев дополнительно необходимо устанавливать код завершения в структуре данных диалога с помощью функции SetWindowLong. При этом в качестве второго параметра для этой функции следует указать значение DWL_MSGRESULT.

В следующем фрагменте кода, который взят из приложения "Property Sheet Demo", проверяется длина строки szTempBuf. Если она больше 8, возвращается значение TRUE, а если меньше - FALSE:

if(lstrlen(szTempBuf) > 8)
{
  SetWindowLong(hdlg, DWL_MSGRESULT, TRUE);
  return TRUE;
}
else
{
  SetWindowLong(hdlg, DWL_MSGRESULT, FALSE);
  return FALSE;
}

Более подробную информацию об использовании этих извещений вы сможете найти в справочной системе SDK. Самые нужные из них будут описаны в разделах "Приложение Property Sheet Demo" и "Wizard Demo".

[Назад] [Содеожание] [Дальше]