Server: Serverelemente
Wenn ein Container einen Server startet, damit ein Benutzer ein eingebettetes oder verknüpftes OLE-Element bearbeiten kann, erstellt die Serveranwendung ein "Serverelement". Das Serverelement, das ein Objekt einer von einer Klasse abgeleitet COleServerItem
ist, stellt eine Schnittstelle zwischen dem Serverdokument und der Containeranwendung bereit.
Die COleServerItem
Klasse definiert mehrere überschreibbare Memberfunktionen, die von OLE aufgerufen werden, in der Regel als Reaktion auf Anforderungen vom Container. Serverelemente können Einen Teil des Serverdokuments oder des gesamten Dokuments darstellen. Wenn ein OLE-Element in das Containerdokument eingebettet ist, stellt das Serverelement das gesamte Serverdokument dar. Wenn das OLE-Element verknüpft ist, kann das Serverelement einen Teil des Serverdokuments oder des gesamten Dokuments darstellen, je nachdem, ob die Verknüpfung mit einem Teil oder mit dem Ganzen besteht.
Im HIERSVR-Beispiel, z. B. die Serverelementklasse, hat ein Element, CServerItem
das ein Zeiger auf ein Objekt der Klasse CServerNode
ist. Das CServerNode
Objekt ist ein Knoten im HIERSVR-Anwendungsdokument, bei dem es sich um eine Struktur handelt. Wenn das CServerNode
Objekt der Stammknoten ist, stellt das CServerItem
Objekt das gesamte Dokument dar. Wenn das CServerNode
Objekt ein untergeordneter Knoten ist, stellt das CServerItem
Objekt einen Teil des Dokuments dar. Ein Beispiel für diese Interaktion finden Sie im MFC OLE-Beispiel HIERSVR .
Implementieren von Serverelementen
Wenn Sie den Anwendungs-Assistenten verwenden, um "Startcode" für Ihre Anwendung zu erstellen, müssen Sie nur Serverelemente in Den Startcode einschließen, um eine der Serveroptionen auf der SEITE "OLE-Optionen" auszuwählen. Wenn Sie einer vorhandenen Anwendung Serverelemente hinzufügen, führen Sie die folgenden Schritte aus:
So implementieren Sie ein Serverelement
Leiten Sie eine Klasse von
COleServerItem
ab.Überschreiben Sie in der abgeleiteten Klasse die
OnDraw
Memberfunktion.Das Framework ruft
OnDraw
auf, um das OLE-Element in einer Metadatei zu rendern. Die Containeranwendung verwendet diese Metadatei, um das Element zu rendern. Die Ansichtsklasse Ihrer Anwendung verfügt auch über eineOnDraw
Memberfunktion, die verwendet wird, um das Element zu rendern, wenn die Serveranwendung aktiv ist.Implementieren Sie eine Außerkraftsetzung
OnGetEmbeddedItem
für Ihre Serverdokumentklasse. Weitere Informationen finden Sie im Artikel Server: Implementieren von Serverdokumenten und dem MFC OLE-Beispiel HIERSVR.Implementieren Sie die
OnGetExtent
Memberfunktion der Serverelementklasse. Das Framework ruft diese Funktion auf, um die Größe des Elements abzurufen. Bei der Standardimplementierung wird keine Aktion ausgeführt.
Ein Tipp für die Serverelementarchitektur
Wie bei der Implementierung von Serverelementen erwähnt, müssen Serveranwendungen elemente sowohl in der Ansicht des Servers als auch in einer von der Containeranwendung verwendeten Metadatei rendern können. In der Anwendungsarchitektur der Microsoft Foundation-Klassenbibliothek rendert die Memberfunktion der Ansichtsklasse OnDraw
das Element, wenn es bearbeitet wird (siehe CView::OnDraw in der Klassenbibliotheksreferenz). Das Serverelement OnDraw
rendert das Element in einer Metadatei in allen anderen Fällen (siehe COleServerItem::OnDraw).
Sie können eine Duplizierung von Code vermeiden, indem Sie Hilfsfunktionen in Der Serverdokumentklasse schreiben und von den OnDraw
Funktionen in Ihren Ansichts- und Serverelementklassen aufrufen. Das MFC OLE-Beispiel HIERSVR verwendet diese Strategie: die Funktionen CServerView::OnDraw
und CServerItem::OnDraw
beide Aufrufe CServerDoc::DrawTree
zum Rendern des Elements.
Die Ansicht und das Element verfügen beide über OnDraw
Memberfunktionen, da sie unter unterschiedlichen Bedingungen zeichnen. Die Ansicht muss Faktoren wie Zoomen, Auswahlgröße und Umfang, Clipping und Benutzeroberflächenelemente wie Bildlaufleisten berücksichtigen. Das Serverelement zeichnet dagegen immer das gesamte OLE-Objekt.
Weitere Informationen finden Sie unter "CView::OnDraw", "COleServerItem", "COleServerItem::OnDraw" und "COleServerDoc::OnGetEmbeddedItem" in der Klassenbibliotheksreferenz.