Поделиться через


Создание безмодальной вкладки свойства

Как правило, создаваемые листы свойств будут модальными. При использовании модального листа свойств пользователь должен закрыть лист свойств, прежде чем использовать любую другую часть приложения. В этой статье описаны методы, которые можно использовать для создания листа свойств без режима, который позволяет пользователю открывать лист свойств при использовании других частей приложения.

Чтобы отобразить лист свойств в виде диалогового окна без режима вместо модального диалогового окна, вызовите CPropertySheet::Create вместо DoModal. Для поддержки листа свойств без режима необходимо также реализовать некоторые дополнительные задачи.

Одна из дополнительных задач заключается в обмене данными между листом свойств и внешним объектом, который он изменяет при открытии листа свойств. Обычно это та же задача, что и для стандартных диалоговых окон без режима. Часть этой задачи реализует канал обмена данными между листом свойств без режима и внешним объектом, к которому применяются параметры свойства. Эта реализация гораздо проще, если вы наследуете класс из CPropertySheet для листа свойств без режима. В этой статье предполагается, что вы сделали это.

Один из методов обмена данными между листом свойств без режима и внешним объектом (текущий выбор в представлении, например) заключается в определении указателя из листа свойств на внешний объект. Определите функцию (вызываемую что-то подобное SetMyExternalObject) в CPropertySheetпроизводном классе, чтобы изменить указатель при каждом изменении фокуса с одного внешнего объекта на другой. Функция SetMyExternalObject должна сбросить параметры для каждой страницы свойств, чтобы отразить только что выбранный внешний объект. Для этого SetMyExternalObject функция должна иметь доступ к объектам CPropertyPage , принадлежащим к классу CPropertySheet .

Наиболее удобным способом предоставления доступа к страницам свойств в листе свойств является внедрение CPropertyPage объектов в производный CPropertySheetобъект. CPropertyPage Внедрение объектов в CPropertySheetпроизводный объект отличается от типичного дизайна модальных диалоговых окон, где владелец листа свойств создает CPropertyPage объекты и передает их на лист свойств через CPropertySheet::AddPage.

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

См. также

Листы свойств
Обмен данными
Работа с диалоговым окнами в MFC