Persistance

Un contrôle implémente une ou plusieurs interfaces de persistance pour prendre en charge la persistance de son état. Par exemple, l’interface IPersistStreamInit prend en charge la persistance basée sur le flux de l’état du contrôle. IPersistStreamInit remplace IPersistStream et ajoute une méthode d’initialisation, InitNew. Les autres méthodes sont les mêmes dans les deux interfaces. IPersistStreamInit n’est pas dérivé de IPersistStream ; un objet ne prend en charge qu’une seule des deux interfaces selon qu’il nécessite la possibilité d’initialiser de nouvelles instances de lui-même.

Les autres interfaces de persistance qu’un contrôle peut offrir incluent : IPersistStorage, IPersistMemory, IPersistPropertyBag, IPersistMoniker. L’implémenteur de contrôle doit décider des types de persistance les plus importants et implémenter les interfaces de persistance appropriées. L’implémenteur de contrôle décide également ce qu’il faut enregistrer. Par exemple, un contrôle peut enregistrer les valeurs actuelles de ses propriétés ou son emplacement et sa taille dans son conteneur. Le client décide de l’interface qu’il préfère utiliser.

Avant de charger un contrôle à partir de son état persistant, un client peut case activée l’indicateur OLEMISC_SETCLIENTSITEFIRST pour déterminer si le contrôle prend en charge l’obtention de son site client et des propriétés ambiantes avant de charger son état persistant. Cette optimisation peut gagner du temps lors de l’instanciation d’un contrôle, car il est alors libre d’ignorer ses valeurs persistantes au lieu de les charger uniquement pour les remplacer par les propriétés ambiantes fournies par le client.

Un contrôle peut également prendre en charge l’enregistrement et la restauration de son état dans un jeu de propriétés OLE, un ensemble d’identificateurs et de valeurs dans un format spécifié. Cette fonctionnalité peut être utile avec des conteneurs tels que Visual Basic, qui enregistre ses programmes sous forme textuelle. Un contrôle qui souhaite prendre en charge cette fonctionnalité implémente IDataObject::GetData et IDataObject::SetData pour transmettre ses valeurs de propriété au conteneur et à partir de celui-ci, respectivement. Le conteneur doit convertir ces informations en texte et les enregistrer. Les identificateurs utilisés par le contrôle correspondent aux noms de propriétés et aux valeurs du contrôle. Pour obtenir la définition de ce jeu de propriétés, consultez OLE CDK.

Contrôles ActiveX