Обработка кнопки "Применить"

Листы свойств имеют возможность, что стандартные диалоговые окна не позволяют пользователю применять изменения, внесенные перед закрытием листа свойств. Это делается с помощью кнопки "Применить". В этой статье рассматриваются методы, которые можно использовать для правильной реализации этой функции.

Модальные диалоговые окна обычно применяют параметры к внешнему объекту, когда пользователь нажимает кнопку "ОК", чтобы закрыть диалоговое окно. То же самое верно для листа свойств: когда пользователь нажимает кнопку "ОК", новые параметры в листе свойств вступают в силу.

Однако может потребоваться разрешить пользователю сохранять параметры, не закрывая диалоговое окно листа свойств. Это функция кнопки "Применить". Кнопка "Применить" применяет текущие параметры во всех страницах свойств к внешнему объекту, а не применяет только текущие параметры текущей активной страницы.

По умолчанию кнопка "Применить" всегда отключена. Необходимо написать код, чтобы включить кнопку "Применить" в соответствующее время, и необходимо написать код для реализации эффекта Apply, как описано ниже.

Если вы не хотите предлагать функцию Apply к пользователю, не нужно удалить кнопку "Применить". Вы можете оставить его отключенным, так как это будет распространено среди приложений, использующих поддержку стандартного листа свойств, доступных в будущих версиях Windows.

Чтобы сообщить об изменении страницы и включить кнопку "Применить", вызовите.CPropertyPage::SetModified( TRUE ) Если любой из измененных отчетов страниц, кнопка "Применить" останется включенной независимо от того, была ли изменена текущая активная страница.

При каждом изменении параметров на странице следует вызывать CPropertyPage::SetModified . Один из способов определить, когда пользователь изменяет параметр на странице, — реализовать обработчики уведомлений об изменениях для каждого элемента управления на странице свойств, например EN_CHANGE или BN_CLICKED.

Чтобы реализовать эффект кнопки Apply, лист свойств должен сообщить своему владельцу или другому внешнему объекту в приложении, чтобы применить текущие параметры на страницах свойств. В то же время лист свойств должен отключить кнопку "Применить", вызвав CPropertyPage::SetModified( FALSE ) все страницы, которые применили их изменения к внешнему объекту.

Пример этого процесса см. в примере PROPDLG для MFC General.

См. также

Листы свойств