Обработка кнопки "Применить"
Листы свойств имеют возможность, что стандартные диалоговые окна не позволяют пользователю применять изменения, внесенные перед закрытием листа свойств. Это делается с помощью кнопки "Применить". В этой статье рассматриваются методы, которые можно использовать для правильной реализации этой функции.
Модальные диалоговые окна обычно применяют параметры к внешнему объекту, когда пользователь нажимает кнопку "ОК", чтобы закрыть диалоговое окно. То же самое верно для листа свойств: когда пользователь нажимает кнопку "ОК", новые параметры в листе свойств вступают в силу.
Однако может потребоваться разрешить пользователю сохранять параметры, не закрывая диалоговое окно листа свойств. Это функция кнопки "Применить". Кнопка "Применить" применяет текущие параметры во всех страницах свойств к внешнему объекту, а не применяет только текущие параметры текущей активной страницы.
По умолчанию кнопка "Применить" всегда отключена. Необходимо написать код, чтобы включить кнопку "Применить" в соответствующее время, и необходимо написать код для реализации эффекта Apply, как описано ниже.
Если вы не хотите предлагать функцию Apply к пользователю, не нужно удалить кнопку "Применить". Вы можете оставить его отключенным, так как это будет распространено среди приложений, использующих поддержку стандартного листа свойств, доступных в будущих версиях Windows.
Чтобы сообщить об изменении страницы и включить кнопку "Применить", вызовите.CPropertyPage::SetModified( TRUE )
Если любой из измененных отчетов страниц, кнопка "Применить" останется включенной независимо от того, была ли изменена текущая активная страница.
При каждом изменении параметров на странице следует вызывать CPropertyPage::SetModified . Один из способов определить, когда пользователь изменяет параметр на странице, — реализовать обработчики уведомлений об изменениях для каждого элемента управления на странице свойств, например EN_CHANGE или BN_CLICKED.
Чтобы реализовать эффект кнопки Apply, лист свойств должен сообщить своему владельцу или другому внешнему объекту в приложении, чтобы применить текущие параметры на страницах свойств. В то же время лист свойств должен отключить кнопку "Применить", вызвав CPropertyPage::SetModified( FALSE )
все страницы, которые применили их изменения к внешнему объекту.
Пример этого процесса см. в примере PROPDLG для MFC General.