Compartilhar via


Servidores: itens de servidor

Quando um contêiner inicia um servidor para que um usuário possa editar um item OLE inserido ou vinculado, o aplicativo de servidor cria um "item de servidor". O item de servidor, que é um objeto de uma classe derivada de COleServerItem, fornece uma interface entre o documento do servidor e o aplicativo de contêiner.

A classe COleServerItem define várias funções membro substituíveis que são chamadas pelo OLE, geralmente em resposta a solicitações do contêiner. Os itens de servidor podem representar parte do documento do servidor ou todo o documento. Quando um item OLE é inserido no documento do contêiner, o item de servidor representa todo o documento do servidor. Quando o item OLE é vinculado, o item de servidor pode representar uma parte do documento do servidor ou todo o documento, dependendo de o link ser para uma parte ou para o todo.

No exemplo HIERSVR, por exemplo, a classe de item do servidor, CServerItem, tem um membro que é um ponteiro para um objeto da classe CServerNode. O objeto CServerNode é um nó no documento do aplicativo HIERSVR, que é uma árvore. Quando o objeto CServerNode é o nó raiz, o objeto CServerItem representa todo o documento. Quando o objeto CServerNode é um nó filho, o objeto CServerItem representa uma parte do documento. Consulte o exemplo OLE do MFC HIERSVR para obter um exemplo dessa interação.

Implementando itens de servidor

Se usar o assistente de aplicativo para produzir código "inicial" para o aplicativo, você precisará apenas escolher uma das opções de servidor na página Opções do OLE para incluir itens de servidor no código inicial. Se você estiver adicionando itens de servidor a um aplicativo existente, execute as seguintes etapas:

Para implementar um item de servidor

  1. Deriva uma classe de COleServerItem.

  2. Na classe derivada, substitua a função membro OnDraw.

    A estrutura chama OnDraw para renderizar o item OLE em um meta-arquivo. O aplicativo de contêiner usa esse meta-arquivo para renderizar o item. A classe de exibição do aplicativo também tem uma função membro OnDraw, que é usada para renderizar o item quando o aplicativo de servidor está ativo.

  3. Implemente uma substituição de OnGetEmbeddedItem para classe de documento do servidor. Para obter mais informações, consulte o artigo Servidores: implementando documentos de servidor e o exemplo de OLE do MFC HIERSVR.

  4. Implemente a função membro OnGetExtent da classe de item de servidor. A estrutura chama essa função para recuperar o tamanho do item. A implementação padrão não tem ação.

Uma dica para a arquitetura de item de servidor

Conforme observado em Implementando itens de servidor, os aplicativos de servidor devem ser capazes de renderizar itens tanto na exibição do servidor quanto em um meta-arquivo usado pelo aplicativo de contêiner. Na arquitetura de aplicativo da biblioteca Microsoft Foundation Class, a função membro OnDraw da classe de exibição renderiza o item quando ele está sendo editado (consulte CView::OnDraw na Referência da Biblioteca de Classes). O OnDraw do item de servidor renderiza o item em um meta-arquivo em todos os outros casos (consulte COleServerItem::OnDraw).

Você pode evitar a duplicação de código escrevendo funções auxiliares na classe de documento de servidor e chamando-as das funções OnDraw em sua exibição e classes de item de servidor. O exemplo de OLE do MFC HIERSVR usa esta estratégia: as funções CServerView::OnDraw e CServerItem::OnDraw chamam CServerDoc::DrawTree para renderizar o item.

A exibição e o item têm funções membro OnDraw porque desenham em condições diferentes. A exibição deve levar em conta fatores como zoom, tamanho e extensão da seleção, recorte e elementos da interface do usuário, como barras de rolagem. O item de servidor, por outro lado, sempre desenha todo o objeto OLE.

Para obter mais informações, consulte CView::OnDraw, COleServerItem, COleServerItem::OnDraw e COleServerDoc::OnGetEmbeddedItem na Referência da Biblioteca de Classes.

Confira também

Servidores