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 est un remplacement de IPersistStream et ajoute une méthode d’initialisation, InitNew. Les autres méthodes sont identiques dans les deux interfaces. IPersistStreamInit n’est pas dérivé de IPersistStream; un objet ne prend en charge qu’une des deux interfaces en fonction de la possibilité d’initialiser de nouvelles instances.
D’autres interfaces de persistance qu’un contrôle peut offrir sont les suivantes : IPersistStorage , IPersistMemory, IPersistPropertyBag, IPersistMoniker. L’implémenteur de contrôle doit décider quels types de persistance sont 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 au sein de 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 vérifier l’indicateur OLEMISC_SETCLIENTSITEFIRST pour déterminer si le contrôle prend en charge l’obtention de ses propriétés clientes et ambiantes avant de charger son état persistant. Cette optimisation peut gagner du temps lors de l’instanciation d’un contrôle, car le contrôle est alors libre d’ignorer ses valeurs persistantes plutôt que 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é à et à partir du conteneur, respectivement. Il s’agit du travail du conteneur pour convertir ces informations en texte et l’enregistrer. Les identificateurs utilisés par le contrôle correspondent aux noms de propriétés du contrôle et aux valeurs. Consultez le CDK OLE pour connaître la définition de ce jeu de propriétés.
Rubriques connexes