Serwery: elementy serwera
Gdy kontener uruchamia serwer, aby użytkownik mógł edytować osadzony lub połączony element OLE, aplikacja serwera tworzy "element serwera". Element serwera, który jest obiektem klasy pochodzącej z COleServerItem
klasy , zapewnia interfejs między dokumentem serwera a aplikacją kontenera.
Klasa COleServerItem
definiuje kilka funkcji składowych, które można zastąpić, które są wywoływane przez OLE, zwykle w odpowiedzi na żądania z kontenera. Elementy serwera mogą reprezentować część dokumentu serwera lub cały dokument. Gdy element OLE jest osadzony w dokumencie kontenera, element serwera reprezentuje cały dokument serwera. Gdy element OLE jest połączony, element serwera może reprezentować część dokumentu serwera lub cały dokument, w zależności od tego, czy łącze jest częścią, czy z całością.
Na przykład w przykładzie HIERSVR klasa CServerItem
elementu serwera ma element członkowski, który jest wskaźnikiem do obiektu klasy CServerNode
. Obiekt CServerNode
jest węzłem w dokumencie aplikacji HIERSVR, który jest drzewem. CServerNode
Gdy obiekt jest węzłem głównym, CServerItem
obiekt reprezentuje cały dokument. CServerNode
Gdy obiekt jest węzłem podrzędnym, CServerItem
obiekt reprezentuje część dokumentu. Zobacz przykładowy interfejs HIERSVR MFC OLE, aby zapoznać się z przykładem tej interakcji.
Implementowanie elementów serwera
Jeśli używasz kreatora aplikacji do tworzenia kodu "starter" dla aplikacji, wszystko, co musisz zrobić, aby uwzględnić elementy serwera w kodzie startowym, to wybrać jedną z opcji serwera na stronie Opcje OLE. Jeśli dodasz elementy serwera do istniejącej aplikacji, wykonaj następujące kroki:
Aby zaimplementować element serwera
Tworzenie klasy z
COleServerItem
klasy .W klasie pochodnej zastąp funkcję składową
OnDraw
.Wywołania
OnDraw
struktury umożliwiające renderowanie elementu OLE w metapliku. Aplikacja kontenera używa tego metapliku do renderowania elementu. Klasa widoków aplikacji ma również funkcję składowąOnDraw
, która jest używana do renderowania elementu, gdy aplikacja serwera jest aktywna.Zaimplementuj
OnGetEmbeddedItem
przesłonięcia dla klasy dokumentów serwera. Aby uzyskać więcej informacji, zobacz artykuł Serwery: implementowanie dokumentów serwera i przykładowe MFC OLE HIERSVR.Zaimplementuj
OnGetExtent
funkcję składową klasy elementów serwera. Struktura wywołuje tę funkcję, aby pobrać rozmiar elementu. Domyślna implementacja nic nie robi.
Porada dotycząca architektury elementu serwera
Jak wspomniano w temacie Implementowanie elementów serwera, aplikacje serwera muszą mieć możliwość renderowania elementów zarówno w widoku serwera, jak i w metapliku używanym przez aplikację kontenera. W architekturze aplikacji biblioteki klas programu Microsoft Foundation funkcja składowa klasy OnDraw
widoku renderuje element podczas jego edycji (zobacz CView::OnDraw w dokumentacji biblioteki klas). Element OnDraw
serwera renderuje element w metapliku we wszystkich innych przypadkach (zobacz COleServerItem::OnDraw).
Można uniknąć duplikowania kodu, pisząc funkcje pomocnicze w klasie dokumentów serwera i wywołując je z OnDraw
funkcji w klasach widoków i elementów serwera. Przykładowy interfejs HIERSVR MFC używa tej strategii: funkcji CServerView::OnDraw
i CServerItem::OnDraw
obu wywołań CServerDoc::DrawTree
w celu renderowania elementu.
Widok i element mają OnDraw
funkcje składowe, ponieważ rysują się w różnych warunkach. Widok musi uwzględniać takie czynniki jak powiększanie, rozmiar zaznaczenia i zakres, wycinanie i elementy interfejsu użytkownika, takie jak paski przewijania. Z drugiej strony element serwera zawsze rysuje cały obiekt OLE.
Aby uzyskać więcej informacji, zobacz CView::OnDraw, COleServerItem, COleServerItem::OnDraw i COleServerDoc::OnGetEmbeddedItem w dokumentacji biblioteki klas.