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

  d8ef8794     

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


Когда пользователь нажимает кнопки 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".



Содержание раздела