Server: elementi server
Quando un contenitore avvia un server in modo che un utente possa modificare un elemento OLE incorporato o collegato, l'applicazione server crea un "elemento server". L'elemento del server, che è un oggetto di una classe derivata da COleServerItem
, fornisce un'interfaccia tra il documento del server e l'applicazione contenitore.
La classe COleServerItem
definisce diverse funzioni membro di cui è possibile eseguire l'override che vengono chiamate da OLE, in genere in risposta alle richieste del contenitore. Gli elementi server possono rappresentare una parte o l'intero documento server. Quando un elemento OLE è incorporato nel documento contenitore, l'elemento server rappresenta l'intero documento server. Quando l'elemento OLE è collegato, l'elemento server può rappresentare una parte del documento server o l'intero documento, a seconda che il collegamento sia verso una parte o l'intero documento.
Nell'esempio HIERSVR, ad esempio, la classe dell'elemento server, CServerItem
, ha un membro che è un puntatore a un oggetto della classe CServerNode
. L'oggetto CServerNode
è un nodo nel documento dell'applicazione HIERSVR, ovvero un albero. Quando l'oggetto CServerNode
è il nodo radice, l'oggetto CServerItem
rappresenta l'intero documento. Quando l'oggetto CServerNode
è un nodo figlio, l'oggetto CServerItem
rappresenta una parte del documento. Per un esempio di questa interazione, vedere l'esempio OLE MFC HIERSVR .
Implementazione di elementi del server
Se si utilizza la creazione guidata applicazione per scrivere il codice "di avvio" dell'applicazione, per includere gli elementi server nel codice di avvio è sufficiente scegliere una delle opzioni server dalla pagina Opzioni OLE. Se si aggiungono elementi server a un'applicazione esistente, attenersi ai passaggi indicati di seguito:
Per implementare un elemento server
Derivare una classe da
COleServerItem
.Nella classe derivata, eseguire l'override della funzione membro
OnDraw
.Il framework chiama
OnDraw
per eseguire il rendering dell'elemento OLE in un metafile. L'applicazione contenitore utilizza tale metafile per eseguire il rendering dell'elemento. La classe di visualizzazione dell'applicazione dispone inoltre di una funzione membroOnDraw
, utilizzata per eseguire il rendering dell'elemento quando l'applicazione server è attiva.Implementare un override di
OnGetEmbeddedItem
per la classe documento server. Per altre informazioni, vedere l'articolo Server: Implementazione di documenti del server e HIERSVR di esempio OLE MFC.Implementare la funzione membro
OnGetExtent
della classe dell'elemento server. Il framework chiama questa funzione per recuperare la dimensione dell'elemento. L'implementazione predefinita non esegue alcuna operazione.
Suggerimento per l'architettura degli elementi del server
Come indicato in Implementazione degli elementi del server, le applicazioni server devono essere in grado di eseguire il rendering degli elementi nella visualizzazione del server e in un metafile usato dall'applicazione contenitore. Nell'architettura dell'applicazione della libreria di classi Microsoft Foundation, la funzione membro della OnDraw
classe view esegue il rendering dell'elemento quando viene modificato (vedere CView::OnDraw nella guida di riferimento alla libreria di classi). L'elemento del OnDraw
server esegue il rendering dell'elemento in un metafile in tutti gli altri casi (vedere COleServerItem::OnDraw).
È possibile evitare la duplicazione del codice scrivendo funzioni di supporto nella classe del documento server e chiamandole dalle funzioni OnDraw
nelle classi dell'elemento server e di visualizzazione. L'esempio OLE MFC HIERSVR usa questa strategia: le funzioni CServerView::OnDraw
e CServerItem::OnDraw
entrambe le chiamate CServerDoc::DrawTree
per eseguire il rendering dell'elemento.
La visualizzazione e l'elemento hanno entrambi funzioni membro OnDraw
, perché eseguono il disegno in circostanze diverse. La visualizzazione deve considerare fattori quali lo zoom, la dimensione e l'ambito di selezione, il ritaglio e gli elementi dell'interfaccia utente quali le barre di scorrimento. L'elemento server, invece, disegna sempre l'intero oggetto OLE.
Per altre informazioni, vedere CView::OnDraw, COleServerItem, COleServerItem::OnDraw e COleServerDoc::OnGetEmbeddedItem nella Guida di riferimento alla libreria di classi.