Поделиться через


Визуальное представление

Элемент управления поддерживает размещение и отображение себя в контейнере через составную технологию документа и технологию перетаскивания OLE, которая включает как элемент управления, так и его контейнер. Элемент управления должен иметь возможность рисования, а контейнер управляет положением элемента управления и его размером.

Элементы управления добавляются в основные функции, предоставляемые документами OLE. Элемент управления вызывает метод IOleClientSite::RequestNewObjectLayout , чтобы сообщить контейнеру, что он хочет изменить его размер. Клиент вызывает IOleObject элемента управления::GetExtent, чтобы получить новый размер и вызывает IOleInPlaceObject::SetObjectRects, чтобы задать для элемента управления новый размер.

Элементы управления, поддерживающие только IPersistStream или IPersistStreamInit, не поддерживают кэширование через IOleCache2, так как кэш требует поддержки IPersist служба хранилища. Однако эти элементы управления должны предоставить клиенту способ отрисовки элемента управления с помощью IDataObject::GetData , чтобы клиент может при необходимости создавать собственный кэш данных презентации для элемента управления и управлять ими.

Элементы управления используют тип HIMETRIC для своих координат. Однако разные контейнеры могут использовать разные системы координат. Контейнер хочет получать координаты в собственной системе, но элемент управления не обязательно знает, какие координаты использует его контейнер. Для успешного взаимодействия элемент управления должен преобразовать значения в координаты контейнера. Контейнер предоставляет объект сайта с помощью метода IOleControlSite::TransformCoords. Элемент управления вызывает этот метод на клиентском сайте контейнера сначала, чтобы преобразовать его координаты в соответствующие координаты для контейнера. Затем он может передать преобразованные координаты в контейнер.

Элементы управления могут вызывать IOleControlSite::LockInPlaceActive в объекте сайта контейнера, чтобы предотвратить попытку контейнера понизить элемент управления из активного состояния на месте. Понижение элемента управления таким образом приводит к деактивации элемента управления и уничтожению его окна, поэтому если элемент управления должен поддерживать его окно в течение известного времени, он может вызвать LockInPlaceActive , чтобы гарантировать его состояние.

Элементы управления ActiveX