Partilhar via


Contêineres de documentos ativos

Um contêiner de documento ativo, como o Microsoft Office Binder ou o Internet Explorer, permite que você trabalhe com vários documentos de diferentes tipos de aplicativo em um único quadro (em vez de forçá-lo a criar e usar vários quadros de aplicativo para cada tipo de documento).

MFC fornece suporte completo para contêineres de documentos ativos na COleDocObjectItem classe. Você pode usar o MFC Application Wizard para criar um contêiner de documento ativo marcando a caixa de seleção Ative document container na página Compound Document Support do MFC Application Wizard. Para obter mais informações, consulte Criando um aplicativo de contêiner de documento ativo.

Para obter mais informações sobre contêineres de documentos ativos, consulte:

Requisitos do recipiente

O suporte ativo a documentos em um contêiner de documentos ativo implica mais do que apenas implementações de interface: também requer conhecimento de uso das interfaces de um objeto contido. O mesmo se aplica às extensões de documento ativas, onde o contêiner também deve saber como usar essas interfaces de extensão nos próprios documentos ativos.

Um contêiner de documentos ativo que integra documentos ativos deve:

  • Ser capaz de manipular o armazenamento de objetos através da IPersistStorage interface, ou seja, deve fornecer uma IStorage instância para cada documento ativo.

  • Suporta os recursos básicos de incorporação de documentos OLE, necessitando de objetos "site" (um por documento ou incorporação) que implementam IOleClientSite e IAdviseSink.

  • Suporte à ativação diretamente de objetos incorporados ou documentos ativos. Os objetos de site do contêiner devem implementar IOleInPlaceSite e o objeto de quadro do contêiner deve fornecer IOleInPlaceFrame.

  • Ofereça suporte às extensões dos documentos ativos implementando IOleDocumentSite para fornecer o mecanismo para que o contêiner converse com o documento. Opcionalmente, o contêiner pode implementar as interfaces de documento ativas IOleCommandTarget e IContinueCallback para executar comandos simples, como imprimir ou salvar.

O objeto frame, os objetos view e o objeto container podem, opcionalmente, implementar IOleCommandTarget para dar suporte ao despacho de determinados comandos, conforme discutido em Command Targets. Os objetos View e container também podem, opcionalmente, implementar IPrint e IContinueCallback, para suportar a impressão programática, conforme discutido em Impressão Programática.

A figura a seguir mostra as relações conceituais entre um contêiner e seus componentes (à esquerda) e o documento ativo e suas exibições (à direita). O documento ativo gerencia o armazenamento e os dados, e o modo de exibição exibe ou, opcionalmente, imprime esses dados. Interfaces em negrito são as necessárias para a participação ativa de documentos; os negritos e itálicos são opcionais. Todas as outras interfaces são necessárias.

Interfaces ativas de contêiner de documentos.

Um documento que suporta apenas uma única exibição pode implementar os componentes de exibição e documento (ou seja, suas interfaces correspondentes) em uma única classe concreta. Além disso, um site de contêiner que ofereça suporte apenas a um modo de exibição de cada vez pode combinar o site do documento e o site de exibição em uma única classe de site concreto. O objeto de quadro do contêiner, no entanto, deve permanecer distinto, e o componente de documento do contêiner é meramente incluído aqui para dar uma imagem completa da arquitetura; ele não é afetado pela arquitetura de contenção de documentos ativa.

Objetos do Site do Documento

Na arquitetura de contenção de documentos ativa, um site de documento é o mesmo que um objeto de site cliente em Documentos OLE com a adição da interface IOleDocument.

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

O site de documento é conceitualmente o contêiner para um ou mais objetos de "site de exibição". Cada objeto de local de visualização é associado a objetos de visualização individuais do documento gerido pelo local de documento. Se o contêiner oferecer suporte apenas a uma única exibição por site de documento, ele poderá implementar o site de documento e o site de exibição com uma única classe concreta.

Exibir objetos do site

O objeto de visualização do contentor gere o espaço de visualização para uma visualização específica de um documento. Além de suportar a interface padrão IOleInPlaceSite, um site de visualização geralmente também implementa IContinueCallback para o controle programático de impressão. (Observe que o objeto de exibição nunca faz uma consulta por IContinueCallback, logo pode ser realmente implementado em qualquer objeto que o contêiner desejar.)

Um container que ofereça suporte a várias visualizações deve ser capaz de criar múltiplos objetos de site para visualização dentro do site do documento. Isso fornece a cada exibição serviços de ativação e desativação separados, conforme fornecido por meio do IOleInPlaceSite.

Objeto de quadro

O objeto de estrutura do contêiner é, em sua maioria, a mesma estrutura usada para ativação local em Documentos OLE, ou seja, o mesmo que lida com a negociação de menu e barra de ferramentas. Um objeto de visualização tem acesso a esta moldura através de IOleInPlaceSite::GetWindowContext, que também fornece acesso ao objeto contentor representando o documento contentor (que pode lidar com a negociação da barra de ferramentas ao nível do painel e a listagem dos objetos contidos).

Um contêiner de documento ativo pode aumentar o quadro adicionando IOleCommandTarget. Isso permite que ele receba comandos que se originam na interface do usuário do documento ativo da mesma forma que essa interface pode permitir que um contêiner envie os mesmos comandos (como Arquivo Novo, Abrir, Salvar como, Imprimir; Editar Copiar, Colar, Desfazer e outros) para um documento ativo. Para obter mais informações, consulte Destinos de comando.

Ver também

Contenção ativa de documentos