Représentation visuelle
Un contrôle prend en charge le positionnement et l’affichage au sein de son conteneur par le biais de la technologie de document composé et de la technologie de glisser-déplacer OLE qui implique à la fois le contrôle et son conteneur. Le contrôle doit pouvoir se dessiner lui-même alors que le conteneur gère la position du contrôle et sa taille.
Les contrôles ajoutent aux fonctions de base fournies par les documents OLE. Un contrôle appelle la méthode IOleClientSite ::RequestNewObjectLayout pour indiquer à son conteneur qu’il souhaite modifier sa taille. Le client appelle le IOleObject ::GetExtent du contrôle pour obtenir la nouvelle taille et appelle IOleInPlaceObject ::SetObjectRects pour définir le contrôle sur sa nouvelle taille.
Les contrôles qui prennent uniquement en charge IPersistStream ou IPersistStreamInit ne prennent pas en charge la mise en cache via IOleCache2, car le cache nécessite la prise en charge de IPersistStorage. Toutefois, ces contrôles doivent permettre au client d’afficher le contrôle via IDataObject ::GetData afin que le client puisse éventuellement créer et gérer son propre cache des données de présentation pour le contrôle.
Les contrôles utilisent le type HIMETRIC pour ses coordonnées. Toutefois, différents conteneurs peuvent utiliser différents systèmes de coordonnées. Le conteneur souhaite recevoir des coordonnées dans son propre système, mais le contrôle ne sait pas nécessairement quelles coordonnées son conteneur utilise. Pour communiquer avec succès, le contrôle a besoin d’un moyen de convertir des valeurs en coordonnées de son conteneur. Le conteneur fournit un objet de site avec la méthode IOleControlSite ::TransformCoords. Le contrôle appelle cette méthode sur le site client de son conteneur pour convertir ses coordonnées en coordonnées appropriées pour le conteneur. Ensuite, il peut passer les coordonnées converties au conteneur.
Les contrôles peuvent appeler IOleControlSite ::LockInPlaceActive dans l’objet de site du conteneur pour empêcher le conteneur de tenter de rétrograder le contrôle de l’état actif sur place. Rétrograder le contrôle de cette façon entraîne la désactivation du contrôle et sa fenêtre détruite. Par conséquent, si le contrôle doit conserver sa fenêtre pendant une durée connue, il peut appeler LockInPlaceActive pour garantir son état.
Rubriques connexes