Compartilhar 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çar você a criar e usar vários quadros de aplicativo para cada tipo de documento).

O MFC fornece suporte total para contêineres de documentos ativos na COleDocObjectItem classe. Você pode usar o Assistente de Aplicativo MFC para criar um contêiner de documento ativo selecionando a caixa de seleção de contêiner de documento ativo na página De suporte composto de documento do Assistente de Aplicativo MFC. 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 de contêiner

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

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

  • Seja capaz de lidar com o armazenamento de objetos por meio da IPersistStorage interface, ou seja, ele deve fornecer uma IStorage instância para cada documento ativo.

  • Dê suporte aos recursos básicos de inserção de documentos OLE, exigindo objetos "site" (um por documento ou inserção) que implementam IOleClientSite e IAdviseSink.

  • Suporte à ativação in-loco de objetos inseridos ou documentos ativos. Os objetos do site do contêiner devem ser implementados IOleInPlaceSite e o objeto de quadro do contêiner deve fornecer IOleInPlaceFrame.

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

O objeto frame, os objetos de exibição e o objeto contêiner podem, opcionalmente, implementar IOleCommandTarget para dar suporte à expedição de determinados comandos, conforme discutido em Destinos de Comando. Objetos de exibição e contêiner também podem, opcionalmente, implementar IPrint e IContinueCallbackdar suporte à impressão programática, conforme discutido na 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 a exibição exibe ou, opcionalmente, imprime esses dados. Interfaces em negrito são aquelas necessárias para a participação ativa do documento; aqueles em negrito e itálico são opcionais. Todas as outras interfaces são necessárias.

Interfaces de contêiner de documentos ativos.

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

Objetos do site do documento

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

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

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

Exibir objetos do site

O objeto de site de exibição de um contêiner gerencia o espaço de exibição para uma exibição específica de um documento. Além de dar suporte à interface padrão IOleInPlaceSite , um site de exibição também geralmente implementa para controle de IContinueCallback impressão programático. (Observe que o objeto de exibição nunca consulta para IContinueCallback que ele possa realmente ser implementado em qualquer objeto desejado pelo contêiner.)

Um contêiner que dá suporte a várias exibições deve ser capaz de criar vários objetos de site de exibição no site do documento. Isso fornece a cada exibição serviços de ativação e desativação separados, conforme fornecido por meio IOleInPlaceSitede .

Objeto Frame

O objeto de quadro do contêiner é, na maioria das vezes, o mesmo quadro usado para ativação in-loco em Documentos OLE, ou seja, aquele que manipula a negociação de menu e barra de ferramentas. Um objeto de exibição tem acesso a esse objeto de quadro por meio IOleInPlaceSite::GetWindowContext, que também fornece acesso ao objeto contêiner que representa o documento de contêiner (que pode manipular a negociação da barra de ferramentas no nível do painel e a enumeração de objeto contida).

Um contêiner de documento ativo pode aumentar o quadro adicionando IOleCommandTarget. Isso permite que ele receba comandos originados 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; Edite Copiar, Colar, Desfazer e outros) em um documento ativo. Para obter mais informações, consulte Os destinos de comando.

Consulte também

Contenção de documento ativo