Condividi tramite


Contenitori di documenti attivi

Un contenitore di documenti attivo, ad esempio Microsoft Office Binder o Internet Explorer, consente di lavorare con diversi documenti di tipi di applicazioni diversi all'interno di un singolo frame (anziché forzare la creazione e l'uso di più frame dell'applicazione per ogni tipo di documento).

MFC fornisce il supporto completo per i contenitori di documenti attivi nella COleDocObjectItem classe . È possibile utilizzare la Creazione guidata applicazione MFC per creare un contenitore di documenti attivi selezionando la casella di controllo Contenitore documento attivo nella pagina Supporto documenti composti della Creazione guidata applicazione MFC. Per altre informazioni, vedere Creazione di un'applicazione contenitore di documenti attivi.

Per altre informazioni sui contenitori di documenti attivi, vedere:

Requisiti dei contenitori

Il supporto di documenti attivi in un contenitore di documenti attivo implica più di semplici implementazioni dell'interfaccia: richiede anche la conoscenza dell'uso delle interfacce di un oggetto contenuto. Lo stesso vale per le estensioni dei documenti attive, in cui il contenitore deve anche sapere come usare tali interfacce di estensione nei documenti attivi stessi.

Un contenitore di documenti attivi che integra documenti attivi deve:

  • Essere in grado di gestire l'archiviazione di oggetti tramite l'interfaccia IPersistStorage , ovvero deve fornire un'istanza IStorage a ogni documento attivo.

  • Supportare le funzionalità di incorporamento di base dei documenti OLE, richiedendo oggetti "sito" (uno per documento o incorporamento) che implementano IOleClientSite e IAdviseSink.

  • Supportare l'attivazione sul posto di oggetti incorporati o documenti attivi. Gli oggetti sito del contenitore devono implementare IOleInPlaceSite e l'oggetto frame del contenitore deve fornire IOleInPlaceFrame.

  • Supportare le estensioni dei documenti attivi implementando IOleDocumentSite per fornire al contenitore il meccanismo per comunicare con il documento. Il contenitore può, facoltativamente, implementare le interfacce del documento attivo IOleCommandTarget e IContinueCallback per raccogliere semplici comandi, come la stampa o il salvataggio.

L'oggetto frame, gli oggetti di visualizzazione e l'oggetto contenitore possono facoltativamente implementare IOleCommandTarget per supportare l'invio di determinati comandi, come descritto in Destinazioni comando. Gli oggetti Visualizzazione e contenitore possono anche implementare IPrint e IContinueCallback, per supportare la stampa a livello di codice, come descritto in Stampa a livello di codice.

La figura seguente illustra le relazioni concettuali tra un contenitore e i relativi componenti (a sinistra) e il documento attivo e le relative visualizzazioni (a destra). Il documento attivo gestisce l'archiviazione e i dati e la visualizzazione visualizza o, facoltativamente, stampa tali dati. Le interfacce in grassetto sono quelle necessarie per la partecipazione attiva al documento; quelli in grassetto e corsivo sono facoltativi. Sono necessarie tutte le altre interfacce.

Interfacce dei contenitori di documenti attivi.

Un documento che supporta solo una singola visualizzazione può implementare sia i componenti di visualizzazione che di documento (ovvero le interfacce corrispondenti) in una singola classe concreta. Inoltre, un sito contenitore che supporta una sola visualizzazione alla volta può combinare il sito del documento e il sito di visualizzazione in una singola classe di sito concreto. L'oggetto frame del contenitore, tuttavia, deve rimanere distinto e il componente del documento del contenitore è semplicemente incluso qui per fornire una visione d'insieme completa dell'architettura; non viene influenzato dall'architettura di contenimento del documento attivo.

Oggetti del sito di documenti

Nell'architettura di contenimento dei documenti attivi, un sito del documento è uguale a un oggetto sito client nei documenti OLE con l'aggiunta dell'interfaccia IOleDocument :

interface IOleDocumentSite : IUnknown
{
    HRESULT ActivateMe(IOleDocumentView *pViewToActivate);
}

Il sito concettuale del documento è il contenitore per uno o più oggetti "sito di visualizzazione". Ogni oggetto del sito di visualizzazione è associato a specifici oggetti di visualizzazione del documento, gestiti dal sito del documento. Se il contenitore supporta solo una singola visualizzazione per sito documento, può implementare il sito del documento e il sito di visualizzazione con una singola classe concreta.

Visualizzare gli oggetti del sito

L'oggetto di visualizzazione di un contenitore gestisce lo spazio di visualizzazione per una vista specifica di un documento. Oltre a supportare l'interfaccia standard IOleInPlaceSite, un sito di visualizzazione implementa generalmente IContinueCallback anche per il controllo della stampa tramite codice. Si noti che l'oggetto di visualizzazione non esegue mai query per IContinueCallback in modo che possa essere effettivamente implementato in qualsiasi oggetto desiderato dal contenitore.

Un contenitore che supporta più visualizzazioni deve essere in grado di creare più oggetti di visualizzazione del sito all'interno del sito del documento. In questo modo viene fornita ogni visualizzazione con servizi di attivazione e disattivazione separati forniti tramite IOleInPlaceSite.

Oggetto Frame

L'oggetto frame del contenitore è, per la maggior parte, lo stesso frame usato per l'attivazione in situ nei documenti OLE, cioè quello che gestisce la negoziazione del menu e della barra degli strumenti. Un oggetto di visualizzazione ha accesso a questo oggetto frame tramite IOleInPlaceSite::GetWindowContext, che fornisce anche l'accesso all'oggetto contenitore che rappresenta il documento contenitore, il quale può gestire la negoziazione della barra degli strumenti a livello di riquadro e l'enumerazione degli oggetti contenuti.

Un contenitore di documenti attivi può aumentare il frame aggiungendo IOleCommandTarget. Ciò consente di ricevere comandi che hanno origine nell'interfaccia utente del documento attivo nello stesso modo in cui questa interfaccia può consentire a un contenitore di inviare gli stessi comandi (ad esempio File Nuovo, Apri, Salva con nome, Stampa; Modifica copia, incolla, annulla e altri) in un documento attivo. Per altre informazioni, vedere Destinazioni dei comandi.

Vedere anche

Contenimento Attivo del Documento