Representación visual

Un control permite colocar y mostrarse dentro de su contenedor a través de la tecnología compuesta de documentos y la tecnología ole de arrastrar y colocar que implica tanto el control como su contenedor. El control debe poder dibujarse a sí mismo mientras el contenedor administra la posición del control y su tamaño.

Los controles se agregan a las funciones básicas proporcionadas por documentos OLE. Un control llama al método IOleClientSite::RequestNewObjectLayout de su cliente para indicar a su contenedor que quiere cambiar su tamaño. El cliente llama al IOleObject::GetExtent del control para obtener el nuevo tamaño y llama a IOleInPlaceObject::SetObjectRects para establecer el control en su nuevo tamaño.

Los controles que solo admiten IPersistStream o IPersistStreamInit no admiten el almacenamiento en caché a través de IOleCache2 porque la memoria caché requiere compatibilidad con IPersistStorage. Sin embargo, estos controles deben proporcionar una manera de que el cliente represente el control a través de IDataObject::GetData para que el cliente pueda crear y administrar opcionalmente su propia memoria caché de los datos de presentación para el control.

Los controles usan el tipo HIMETRIC para sus coordenadas. Sin embargo, los distintos contenedores pueden usar sistemas de coordenadas diferentes. El contenedor quiere recibir coordenadas en su propio sistema, pero el control no sabe necesariamente qué coordenadas está usando su contenedor. Para comunicarse correctamente, el control necesita una manera de convertir valores en las coordenadas de su contenedor. El contenedor proporciona un objeto de sitio con el método IOleControlSite::TransformCoords . El control llama primero a este método en el sitio cliente de su contenedor para convertir sus coordenadas en las coordenadas adecuadas para el contenedor. A continuación, puede pasar las coordenadas convertidas al contenedor.

Los controles pueden llamar a IOleControlSite::LockInPlaceActive en el objeto de sitio del contenedor para evitar que el contenedor intente degradar el control fuera del estado activo local. La degradación del control de esta manera hace que el control se desactive y se destruya su ventana, por lo que si el control debe mantener su ventana durante un tiempo conocido, puede llamar a LockInPlaceActive para garantizar su estado.

Controles ActiveX