Documenti attivi
I documenti attivi estendono la tecnologia composta del documento OLE.Queste estensioni sono fornite sotto forma di interfacce aggiuntive che gestiscono visualizzazioni, in modo che gli oggetti possono essere eseguite all'interno dei contenitori ma mantenere il controllo sulla relativa visualizzazione e funzioni di stampa.Questo processo consente di visualizzare documenti sia nei frame stranieri (come il raccoglitore Microsoft Office o Microsoft Internet Explorer) che nei frame nativi (come le porte della visualizzazione del prodotto).
In questa sezione viene descritto requisiti per i documenti attivifunzionale.Il documento attivo possiede un set di dati e ha accesso all'archiviazione in cui i dati possono essere salvati e recuperati.Possibile creare e gestire uno o più visualizzazioni nei relativi dati.Oltre a supportare incorporare standard e le interfacce sul posto di attivazione dei documenti OLE, il documento attivo passa la possibilità di creare visualizzazioni con IOleDocument.Tramite questa interfaccia, il contenitore può richiedere di creare ed eventualmente enumerare) le visualizzazioni che il documento attivo possibile visualizzare.Tramite questa interfaccia, il documento attivo anche possibile fornire una varietà di informazioni su se stesso, ad esempio se supporta più visualizzazioni o rettangoli complessi.
Ecco l'interfaccia di IOleDocument .Si noti che l'interfaccia di IEnumOleDocumentViews è un enumeratore OLE standard per i tipi di IOleDocumentView * .
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
Ogni documento attivo deve disporre di un provider di visualizzazione del frame con questa interfaccia.Se il documento non è incorporato all'interno di un contenitore, il server di documenti attivi stesso necessario fornire il frame di visualizzazione.Tuttavia, quando il documento attivo viene incorporato in un contenitore di documenti attivi, il contenitore offre il frame di visualizzazione.
Un documento attivo possibile creare uno o più tipi di visualizzazioni dei dati (ad esempio, normale, struttura, layout di pagina, e così via).Le visualizzazioni operano come i filtri tramite il quale i dati siano visibili.Anche se il documento è presente un solo tipo di visualizzazione, è comunque necessario per supportare più visualizzazioni al fine del supporto delle funzionalità della nuova finestra (ad esempio, l'elemento di Nuova finestra scegliere dal menu Finestra nelle applicazioni di Office).
Requisiti per i documenti attivi
Un documento attivo che può essere visualizzato in un contenitore di documenti attivi necessario:
File composita di utilizzo OLE corrispondente al meccanismo di archiviazione implementando IPersistStorage.
Supportare la base che incorpora le funzionalità dei documenti OLE, inclusi Create From File.Si necessita le interfacce IPersistFile, IOleObjecte IDataObject.
Supportare uno o più visualizzazioni, ognuno dei quali è in grado di attivazione sul posto.Ovvero le visualizzazioni devono supportare l'interfaccia IOleDocumentView nonché le interfacce IOleInPlaceObject e IOleInPlaceActiveObject (utilizzando IOleInPlaceSite del contenitore e interfacce di IOleInPlaceFrame ).
Supportare le interfacce IOleDocument, IOleCommandTargete IPrintdel documento attivo standard.
Conoscenza di come e quando utilizzare le interfacce di contenitore-side è implicito in questi requisiti.
Requisiti per gli oggetti visualizzazione
Un documento attivo possibile creare una o più visualizzazioni dei dati.Dal punto di vista funzionale, queste visualizzazioni sono analoghe alle porte in un particolare metodo per la visualizzazione dei dati.Se un documento attivo supporta solo un singolo punto di vista, il documento attivo e la sola visualizzazione possono essere implementati utilizzando una singola classe.IOleDocument::CreateView restituisce un puntatore a interfaccia di IOleDocumentView lo stesso oggetto.
Per essere rappresentato all'interno di un contenitore di documenti attivi, un componente di visualizzazione deve supportare IOleInPlaceObject e IOleInPlaceActiveObject oltre a IOleDocumentView:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
Ogni visualizzazione dispone di un sito di visualizzazione associato, che incapsula il frame di visualizzazione e la porta di visualizzazione (HWND e un'area rettangolare nella finestra.Il sito espone questa funzionalità anche se l'interfaccia standard di IOleInPlaceSite .Si noti che è possibile avere più di un punto di visualizzazione in un singolo elemento HWND.
In genere, ogni tipo di visualizzazione dispone di una rappresentazione stampata diverso.Le visualizzazioni e i siti di visualizzazione corrispondenti devono implementare le interfacce di stampa se IPrint e IContinueCallback, rispettivamente.Il frame di visualizzazione deve negoziare con il provider di visualizzazione con IPrint durante la stampa inizia, in modo che le intestazioni, piè di pagina, margini e gli elementi correlati vengono stampati correttamente.Il provider di visualizzazione notifica al frame degli eventi relativi a IContinueCallback.Per ulteriori informazioni sull'utilizzo di queste interfacce, vedere Stampa a livello di codice.
Si noti che se un documento attivo supporta solo un singolo punto di vista, il documento attivo e che la singola visualizzazione può essere implementata utilizzando una singola classe concreta.IOleDocument::CreateView restituisce semplicemente un puntatore a interfaccia di IOleDocumentView lo stesso oggetto.In breve, non è necessario che esistono due istanze separate quando solo una visualizzazione è obbligatoria.
Un oggetto visualizzazione può essere una destinazione comando.Implementando IOleCommandTarget una visualizzazione può ricevere i controlli provenienti dall'interfaccia utente del contenitore (ad esempio Nuovo, Apri, Salva con nome, Stampa scegliere dal menu di File ; e Copia, Incolla, Annulla scegliere dal menu di Modifica ).Per ulteriori informazioni, vedere Gestione e destinazioni comando.