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
Deriva uma classe de
COleServerItem
.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 membroOnDraw
, que é usada para renderizar o item quando o aplicativo de servidor está ativo.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.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.