Compartilhar via


Contêineres: funcionalidades avançadas

Este artigo descreve as etapas necessárias para inserir recursos avançados opcionais em aplicativos de contêiner existentes. Esses recursos são:

Criar um aplicativo de contêiner/servidor

Um aplicativo de contêiner/servidor é um aplicativo que atua como um contêiner e como um servidor. O Microsoft Word para Windows é um exemplo disso. Você pode inserir documentos do Word para Windows em outros aplicativos e também pode inserir itens em documentos do Word para Windows. O processo de modificação do aplicativo de contêiner para ser um contêiner e um servidor completo (você não pode criar um aplicativo de combinação de contêiner/miniservidor) é semelhante ao processo de criação um servidor completo.

O artigo Servidores: Implementar um servidor lista várias tarefas necessárias para implementar um aplicativo de servidor. Se você converter um aplicativo de contêiner em um aplicativo de contêiner/servidor, precisará executar algumas dessas mesmas tarefas, adicionando código ao contêiner. A seguir, há uma lista de coisas importantes a serem consideradas:

  • O código de contêiner criado pelo assistente de aplicativo já inicializa o subsistema OLE. Você não precisará alterar nem adicionar nada para esse suporte.

  • Onde quer que a classe base de uma classe de documento seja COleDocument, altere a classe base para COleServerDoc.

  • Substitua COleClientItem::CanActivate para evitar a edição de itens no local enquanto o próprio servidor está sendo usado para editar no local.

    Por exemplo, o OCLIENT de exemplo do MFC OLE inseriu um item criado pelo aplicativo contêiner/servidor. Abra o aplicativo OCLIENT e edite in-loco o item criado pelo aplicativo contêiner/servidor. Ao editar o item do aplicativo, você decide que deseja inserir um item criado pelo HIERSVR de exemplo do MFC OLE. Para fazer isso, você não pode usar a ativação in-loco. Você deve abrir totalmente o HIERSVR para ativar este item. Como a biblioteca Microsoft Foundation Class não dá suporte a esse recurso OLE, substituir COleClientItem::CanActivate permite verificar essa situação e evitar um possível erro em tempo de execução em seu aplicativo.

Se você estiver criando um novo aplicativo e quiser que ele funcione como um aplicativo de contêiner/servidor, escolha essa opção na caixa de diálogo Opções OLE no assistente de aplicativo e esse suporte será criado automaticamente. Para obter mais informações, consulte o artigo Visão geral: Criar um contêiner de controle ActiveX. Para obter informações sobre exemplos do MFC, consulte Exemplos do MFC.

Observe que não é possível inserir um aplicativo MDI em si mesmo. Um aplicativo que é um contêiner/servidor não pode ser inserido em si mesmo, a menos que seja um aplicativo SDI.

O recurso Links para Objetos Inseridos permite que um usuário crie um documento com um link OLE para um objeto inserido dentro de seu aplicativo de contêiner. Por exemplo, crie um documento em um processador de texto que contenha uma planilha inserida. Se o aplicativo der suporte a links para objetos inseridos, ele poderá colar um link para a planilha contida no documento do processador de texto. Esse recurso permite que seu aplicativo use as informações contidas na planilha sem saber onde o processador de texto as obteve originalmente.

  1. Derive sua classe de documento de COleLinkingDoc em vez de COleDocument.

  2. Crie uma CLSID (ID de classe) OLE para seu aplicativo usando o Gerador de ID de Classe incluído nas Ferramentas de Desenvolvimento OLE.

  3. Registre o aplicativo com o OLE.

  4. Crie um objeto COleTemplateServer como membro da classe de aplicativo.

  5. Na função membro InitInstance da classe de aplicativo, faça o seguinte:

    • Conecte seu objeto COleTemplateServer aos modelos de documento chamando a função membro do objeto ConnectTemplate.

    • Chame a função membro COleTemplateServer::RegisterAll para registrar todos os objetos de classe com o sistema OLE.

    • Chame COleTemplateServer::UpdateRegistry. O único parâmetro para UpdateRegistry deve ser OAT_CONTAINER se o aplicativo não for iniciado com a opção "/Embedded". Isso registra o aplicativo como um contêiner que pode dar suporte a links para objetos inseridos.

      Se o aplicativo for iniciado com a opção "/Embedded", ele não deverá mostrar sua janela principal, semelhante a um aplicativo de servidor.

O OCLIENT de exemplo do MFC OLE implementa esse recurso. Para obter um exemplo de como isso é feito, consulte a função InitInstance no arquivo OCLIENT.CPP deste aplicativo de exemplo.

Confira também

Contêineres
Servidores