Freigeben über


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 COleServerItemist, 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, CServerItemdas ein Zeiger auf ein Objekt der Klasse CServerNodeist. 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

  1. Leiten Sie eine Klasse von COleServerItem ab.

  2. Ü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 eine OnDraw Memberfunktion, die verwendet wird, um das Element zu rendern, wenn die Serveranwendung aktiv ist.

  3. 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.

  4. 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.

Siehe auch

Server