Condividi tramite


Contenitore 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. Facoltativamente, il contenitore può implementare le IOleCommandTarget interfacce del documento attivo e IContinueCallback raccogliere semplici comandi, ad esempio 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.

Active document container interfaces.

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 un quadro completo dell'architettura; non è interessato dall'architettura di contenimento del documento attivo.

Oggetti sito documento

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

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

Il sito del documento è concettualmente il contenitore per uno o più oggetti "visualizza sito". Ogni oggetto sito di visualizzazione è associato a singoli oggetti visualizzazione del documento gestito 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 sito

L'oggetto sito di visualizzazione di un contenitore gestisce lo spazio di visualizzazione per una visualizzazione specifica di un documento. Oltre a supportare l'interfaccia standard IOleInPlaceSite , un sito di visualizzazione viene generalmente implementato IContinueCallback anche per il controllo di stampa a livello di 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 sito di visualizzazione 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 sul posto in DOCUMENTI OLE, ovvero quello che gestisce la negoziazione del menu e della barra degli strumenti. Un oggetto view ha accesso a questo oggetto frame tramite IOleInPlaceSite::GetWindowContext, che fornisce anche l'accesso all'oggetto contenitore che rappresenta il documento contenitore , che può gestire la negoziazione della barra degli strumenti a livello di riquadro e l'enumerazione dell'oggetto indipendente.

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.

Vedi anche

Contenimento dei documenti attivi