Représentation visuelle

Un contrôle prend en charge le positionnement et l’affichage dans son conteneur via la technologie de document composé et la technologie de glisser-déplacer OLE qui implique à la fois le contrôle et son conteneur. Le contrôle doit être en mesure de dessiner lui-même pendant que le conteneur gère la position du contrôle et sa taille.

Les contrôles s’ajoutent aux fonctions de base fournies par les documents OLE. Un contrôle appelle la méthode IOleClientSite::RequestNewObjectLayout de son client pour indiquer à son conteneur qu’il souhaite modifier sa taille. Le client appelle 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 d’IPersistStorage. Toutefois, ces contrôles doivent fournir au client un moyen 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 des systèmes de coordonnées différents. 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 correctement, 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 d’abord 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 en dehors de l’état actif sur place. La rétrogradation du contrôle de cette façon entraîne la désactivation du contrôle et la destruction de sa fenêtre. 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.

Contrôles ActiveX