Compartilhar via


Documentos ativos

Documentos ativos estendem a tecnologia de documentos compostos de OLE.Essas extensões são fornecidas na forma de interfaces adicionais que gerenciar modos de exibição, para que os objetos podem funcionar dentro de recipientes e ainda manter o controle de exibição e funções de impressão.Este processo torna possível exibir documentos em quadros externos (como o Microsoft Office fichário ou o Microsoft Internet Explorer) e em quadros nativos (como portas de modo de exibição do produto).

Esta seção descreve a funcional requisitos para documentos ativos.O documento ativo possui um conjunto de dados e tenha acesso ao armazenamento onde os dados podem ser salvos e recuperados.Ele pode criar e gerenciar um ou mais exibições em seus dados.Além de dar suporte a incorporação normal e interfaces de ativação in-loco de documentos OLE, o documento ativo se comunica a sua capacidade de criar modos de exibição por meio de IOleDocument.Através dessa interface, o contêiner pode pedir para criar (e possivelmente enumerar) as exibições que pode exibir o documento ativo.Através dessa interface, o documento ativo também pode fornecer informações diversas sobre si, como, por exemplo, se ele oferece suporte a várias exibições ou retângulos complexos.

A seguir está o IOleDocument interface.Observe que o IEnumOleDocumentViews interface é um enumerador OLE padrão para IOleDocumentView * tipos.

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);

}

Cada documento ativo deve ter um provedor de quadro de exibição com esta interface.Se o documento não é incorporado dentro de um recipiente, o próprio servidor do documento ativo deve fornecer o quadro de visualização.No entanto, quando o documento ativo é incorporado em um contêiner do documento ativo, o recipiente fornece o quadro de visualização.

Um documento ativo pode criar um ou mais tipos de views seus dados (por exemplo, normal, estrutura de tópicos, layout da página e assim por diante).Exibições atuam como filtros através dos quais os dados podem ser vistos.Mesmo se o documento tiver somente um tipo de exibição, ainda convém oferecer suporte a vários modos de exibição como um meio de oferecer suporte à nova funcionalidade de janela (por exemplo, o Nova janela item sobre o janela menu em aplicativos do Office).

Requisitos para documentos ativos

Um documento ativo que pode ser exibido em um contêiner do documento ativo deve:

  • Usar arquivos de compostos do OLE como seu mecanismo de armazenamento implementando IPersistStorage.

  • Suporte os recursos básicos de incorporação de documentos OLE, incluindo Criar do arquivo.Isso necessita as interfaces IPersistFile, IOleObject, e IDataObject.

  • Suporte a um ou mais exibições, cada um deles é capaz de ativação in-loco.Isto é, os modos de exibição devem oferecer suporte a interface IOleDocumentView , bem como as interfaces IOleInPlaceObject e IOleInPlaceActiveObject (usando o recipiente IOleInPlaceSite e IOleInPlaceFrame interfaces).

  • Suporte a interfaces do documento ativo padrão IOleDocument, IOleCommandTarget, e IPrint.

Conhecimento de quando e como usar as interfaces de recipiente lado está implícito nesses requisitos.

Requisitos para exibir objetos

Um documento ativo pode criar um ou mais modos de exibição de seus dados.Funcionalmente, essas exibições são como portas para um método específico para exibir os dados.Se um documento ativo só oferece suporte a uma única exibição, podem ser implementados o documento ativo e o único modo de exibição usando uma única classe.IOleDocument::CreateView retorna o mesmo objeto IOleDocumentView o ponteiro de interface.

Para ser representado dentro de um contêiner do documento ativo, um componente de visualização deve suportar IOleInPlaceObject e IOleInPlaceActiveObject além 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);

}

Cada exibição possui um site de exibição associada, que encapsula o quadro de exibição e a porta de visualização (HWND e uma área retangular nessa janela).O site expõe esta funcionalidade porém o padrão IOleInPlaceSite interface.Observe que é possível ter mais de uma porta de visualização em um único HWND.

Normalmente, cada tipo de exibição tem uma representação impressa diferente.Portanto exibições e os sites de modo de exibição correspondente devem implementar as interfaces de impressão se IPrint e IContinueCallback, respectivamente.O quadro de visualização deve negociar com o provedor de visualização por meio de IPrint quando a impressão começa, para que os cabeçalhos, rodapés, margens e elementos relacionados são impressos corretamente.O provedor do modo de exibição notifica o quadro de eventos relacionados a impressão através de IContinueCallback.Para obter mais informações sobre o uso dessas interfaces, consulte Impressão através de programação.

Observe que se um documento ativo só oferece suporte a uma única exibição, em seguida, o documento ativo e o único modo de exibição podem ser implementadas usando uma única classe concreta.IOleDocument::CreateView simplesmente retorna o mesmo objeto IOleDocumentView o ponteiro de interface.Resumindo, não é necessário que haja duas instâncias de objeto separados quando é necessário apenas um modo de exibição.

Um objeto de exibição também pode ser um destino de comando.Implementando IOleCommandTarget um modo de exibição pode receber comandos que se originam na interface do usuário do contêiner (como novo, Abrir, Salvar como, Print na arquivo menu; and Copy, Paste, Undo on the Edit menu).Para mais informações, consulte Manipulação de mensagem e destinos de comando.

Consulte também

Conceitos

Confinamento de documento ativo