Сохраняемость
Элемент управления реализует один или несколько интерфейсов сохраняемости для поддержки сохраняемости состояния. Например, интерфейс IPersistStreamInit поддерживает сохранение состояния элемента управления на основе потока. IPersistStreamInit является заменой IPersistStream и добавляет метод инициализации InitNew. Другие методы одинаковы в обоих интерфейсах. IPersistStreamInit не является производным от IPersistStream; объект поддерживает только один из двух интерфейсов на основе необходимости инициализировать новые экземпляры.
Другие интерфейсы сохраняемости, которые могут предложить элемент управления: IPersist служба хранилища, IPersistMemory, IPersistPropertyBag, IPersistMoniker. Реализутель элементов управления должен решить, какие виды сохраняемости являются наиболее важными и реализовать соответствующие интерфейсы сохраняемости. Средство реализации элемента управления также решает, что сохранить. Например, элемент управления может сохранить текущие значения его свойств или его расположения и размера в контейнере. Клиент решает, какой интерфейс он предпочитает использовать.
Перед загрузкой элемента управления из постоянного состояния клиент может проверка флаг OLEMISC_SETCLIENTSITEFIRST, чтобы определить, поддерживает ли элемент управления получение клиентских сайтов и внешних свойств перед загрузкой постоянного состояния. Эта оптимизация может сэкономить время при создании экземпляра элемента управления, так как элемент управления затем может игнорировать свои постоянные значения, а не загружать их только для переопределения внешними свойствами, предоставленными клиентом.
Элемент управления также может поддерживать сохранение и восстановление состояния в наборе свойств OLE, набор идентификаторов и значений в указанном формате. Эта функция может быть полезна с контейнерами, такими как Visual Basic, которая сохраняет свои программы в текстовой форме. Элемент управления, который хочет поддерживать эту функцию, реализует IDataObject::GetData и IDataObject::SetData для передачи значений свойств в контейнер и из контейнера соответственно. Это задание контейнера для преобразования этих сведений в текст и его сохранения. Идентификаторы, используемые элементом управления, соответствуют именам свойств элемента управления и значениям. Сведения об определении этого набора свойств см. в OLE CDK.