Representación visual
Un control admite el posicionamiento y la visualización 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 mientras el contenedor administra la posición del control y su tamaño.
Los controles agregan a las funciones básicas proporcionadas por documentos OLE. Un control llama al método IOleClientSite::RequestNewObjectLay out de su cliente para indicar a su contenedor que quiere cambiar su tamaño. El cliente llama al IOleObject::GetEx tent 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 para que el cliente represente el control a través de IDataObject::GetData para que el cliente pueda crear y administrar opcionalmente su propia caché de los datos de presentación para el control.
Los controles usan el tipo HIMETRIC para sus coordenadas. Sin embargo, diferentes contenedores pueden usar sistemas de coordenadas diferentes. El contenedor quiere recibir coordenadas en su propio sistema, pero el control no sabe necesariamente qué coordenadas usa 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 en contexto. La degradación del control de esta manera hace que el control se desactive y su ventana se destruya, por lo que si el control debe mantener su ventana durante una duración conocida, puede llamar a LockInPlaceActive para garantizar su estado.
Temas relacionados