Share via


Rappresentazione visiva

Un controllo supporta il posizionamento e la visualizzazione all'interno del contenitore tramite la tecnologia di trascinamento dei documenti composti e la tecnologia ole di trascinamento della selezione che coinvolge sia il controllo che il relativo contenitore. Il controllo deve essere in grado di disegnare se stesso mentre il contenitore gestisce la posizione del controllo e le relative dimensioni.

I controlli aggiungono alle funzioni di base fornite dai documenti OLE. Un controllo chiama il metodo IOleClientSite::RequestNewObjectLayout del client per indicare al contenitore che vuole modificarne le dimensioni. Il client chiama IOleObject::GetExtent del controllo per ottenere le nuove dimensioni e chiama IOleInPlaceObject::SetObjectRects per impostare il controllo sulle nuove dimensioni.

I controlli che supportano solo IPersistStream o IPersistStreamInit non supportano la memorizzazione nella cache tramite IOleCache2 perché la cache richiede il supporto per IPersist Archiviazione. Tuttavia, questi controlli devono consentire al client di eseguire il rendering del controllo tramite IDataObject::GetData , in modo che il client possa creare e gestire facoltativamente la propria cache dei dati della presentazione per il controllo.

I controlli utilizzano il tipo HIMETRIC per le coordinate. Tuttavia, contenitori diversi possono usare sistemi di coordinate diversi. Il contenitore vuole ricevere coordinate nel proprio sistema, ma il controllo non conosce necessariamente le coordinate che il contenitore usa. Per comunicare correttamente, il controllo richiede un modo per convertire i valori nelle coordinate del contenitore. Il contenitore fornisce un oggetto sito con il metodo IOleControlSite::TransformCoords. Il controllo chiama prima questo metodo nel sito client del contenitore per convertire le coordinate nelle coordinate appropriate per il contenitore. Quindi, può passare le coordinate convertite al contenitore.

I controlli possono chiamare IOleControlSite::LockInPlaceActive nell'oggetto sito del contenitore per impedire al contenitore di tentare di abbassare il controllo dallo stato attivo sul posto. Abbassando di livello il controllo in questo modo, il controllo viene disattivato e la finestra viene eliminata definitivamente, quindi se il controllo deve mantenere la finestra per una durata nota, può chiamare LockInPlaceActive per garantire il relativo stato.

Controlli ActiveX