Compartilhar via


Documentos ativos

Os documentos ativas estendem a tecnologia composta do documento OLE. Essas extensões são fornecidas na forma das interfaces adicionais que gerenciam exibições, de forma que os objetos podem funcionar nos contêineres e ainda manter o controle sobre as funções de exibição e impressão. Esse processo é possível exibir documentos em peças de exportações (como a pasta do Microsoft Office ou Microsoft Internet Explorer) e peças nativos (como portas de exibição do produto próprias).

Esta seção descreve requisitos para documentos ativasfuncional. O documento ativo possui um conjunto de dados e tem acesso ao armazenamento em que os dados podem ser salvos e recuperado. Pode criar e gerenciar uma ou mais exibições em seus dados. Além de oferecer suporte às interfaces comuns de inserção e de ativação in-loco de documentos OLE, o documento ativo comunica sua capacidade de criar exibições com IOleDocument. Com essa interface, o contêiner pode solicitar para criar (e possivelmente) para enumerar as exibições que o documento ativo pode exibir. Com essa interface, o documento ativo também pode fornecer informações diversas sobre se, como se ele da suporte a várias exibições ou retângulos complexos.

O seguinte é a interface de IOleDocument . Observe que a interface de IEnumOleDocumentViews é um enumerador OLE padrão para tipos de 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);

}

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

Um documento ativo pode criar um ou mais tipos de exibições de seus dados (por exemplo, normal, descrição, layout de página, e assim por diante). As exibições atuam como os filtros pela qual os dados podem ser considerados. Se o documento tem apenas um tipo de exibição, você ainda pode desejar dar suporte a várias exibições como meio da funcionalidade de suporte de nova janela do (por exemplo, o item de Nova Janela no menu de Janela em aplicativos do Office).

Requisitos para documentos ativas

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

  • Use os arquivos compostos OLE como o mecanismo de armazenamento implementando IPersistStorage.

  • Oferecer suporte aos recursos básicos de inserção de documentos OLE, incluindo Criar do arquivo. Isso necessita as interfaces IPersistFile, IOleObject, e IDataObject.

  • Oferecer suporte a uma ou mais exibições, cada qual é capaz de ativação local. Ou seja, as exibições devem oferecer suporte à interface IOleDocumentView bem como as interfaces IOleInPlaceObject e IOleInPlaceActiveObject (usando IOleInPlaceSite do contêiner e interfaces de IOleInPlaceFrame ).

  • Oferecer suporte às interfaces ativas IOleDocumentpadrão, IOleCommandTarget, e IPrintdo documento.

Dados de conhecimento quando e como usar as interfaces do lado é implícita nesses requisitos.

Requisitos para exibir objetos

Um documento ativo pode criar uma ou mais exibições dos dados. Funcional, essas exibições são as portas em um método específico para exibir os dados. Se um documento ativo da suporte apenas a uma única exibição, o documento ativo e aquela única exibição podem ser implementados usando uma única classe. IOleDocument::CreateView retorna o ponteiro de interface de IOleDocumentView o mesmo objeto.

Para ser representado dentro de um contêiner ativa do documento, um componente de exibição deve oferecer suporte IOleInPlaceObject e IOleInPlaceActiveObject além de 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 tem um site associado da exibição, que encapsula o quadro de exibição e a porta da exibição (HWND e uma área retangular nessa janela). O site exponha essa funcionalidade embora a interface padrão de IOleInPlaceSite . Observe que é possível ter mais de uma porta de exibição em um único HWND.

Normalmente, cada tipo de exibição tem uma representação impressa diferente. Como as exibições e sites da exibição devem implementar as interfaces de impressão se IPrint e IContinueCallback, respectivamente. O quadro de exibição deve negociar com o provedor de exibição com IPrint imprimir quando é iniciado, de modo que os cabeçalhos, os rodapés, as margens, os elementos e sejam impresso corretamente. O provedor de exibição notifica o quadro de eventos impressão- relacionados com IContinueCallback. Para obter mais informações sobre o uso dessas interfaces, consulte Impressão programática.

Observe que se um documento ativo da suporte apenas a uma única exibição, o documento ativo e que a única exibição pode ser implementada usando uma única classe concreta. IOleDocument::CreateView retorna somente o ponteiro de interface de IOleDocumentView o mesmo objeto. Em resumo, não é necessário que haja duas instâncias separadas do objeto somente quando uma exibição é necessária.

Um objeto de exibição também pode ser um destino do comando. Implementando IOleCommandTarget uma exibição pode receber os comandos que se originam na interface de usuário do contêiner (como Novo, Abrir, Salvar como, Imprimir no menu de Arquivo ; e Copiar, Colar, Desfazer no menu de Editar ). Para obter mais informações, consulte Manipulação de mensagem e destinos de comando.

Consulte também

Conceitos

Contenção de documento ativa