Container: Erweiterte Funktionen

In diesem Artikel werden die Schritte beschrieben, die erforderlich sind, um optionale erweiterte Features in vorhandene Containeranwendungen zu integrieren. Diese Funktionen sind:

Erstellen einer Container-/Serveranwendung

Eine Container-/Serveranwendung ist eine Anwendung, die sowohl als Container als auch als Server fungiert. Microsoft Word für Windows ist ein Beispiel dafür. Sie können Word für Windows-Dokumente in andere Anwendungen einbetten, und Sie können Elemente auch in Word für Windows-Dokumente einbetten. Der Prozess zum Ändern der Containeranwendung als Container und vollständiger Server (Sie können keine Kombinationscontainer/Miniserveranwendung erstellen) ähnelt dem Verfahren zum Erstellen eines vollständigen Servers.

Der Artikel Server: Implementieren eines Servers listet eine Reihe von Aufgaben auf, die zum Implementieren einer Serveranwendung erforderlich sind. Wenn Sie eine Containeranwendung in eine Container-/Serveranwendung konvertieren, müssen Sie einige dieser Aufgaben ausführen und dem Container Code hinzufügen. Im Folgenden sind die wichtigen Punkte aufgeführt, die Sie berücksichtigen sollten:

  • Der vom Anwendungs-Assistenten erstellte Containercode initialisiert bereits das OLE-Subsystem. Sie müssen nichts für diesen Support ändern oder hinzufügen.

  • Ändern Sie unabhängig davon, wo sich die Basisklasse einer Dokumentklasse befindet COleDocument, die Basisklasse in COleServerDoc.

  • Überschreiben COleClientItem::CanActivate , um das Bearbeiten von Elementen zu vermeiden, während der Server selbst zum Bearbeiten verwendet wird.

    Beispielsweise hat der MFC OLE-Beispiel-OCLIENT ein Element eingebettet, das von Ihrer Container-/Serveranwendung erstellt wurde. Sie öffnen die OCLIENT-Anwendung und bearbeiten das element, das von Ihrer Container-/Serveranwendung erstellt wurde. Beim Bearbeiten des Anwendungselements entscheiden Sie, dass Sie ein Element einbetten möchten, das vom MFC OLE-Beispiel HIERSVR erstellt wurde. Dazu können Sie die direkte Aktivierung nicht verwenden. Sie müssen HIERSVR vollständig öffnen, um dieses Element zu aktivieren. Da diese OLE-Funktion von der Microsoft Foundation-Klassenbibliothek nicht unterstützt wird, können Sie diese Situation überschreiben COleClientItem::CanActivate und einen möglichen Laufzeitfehler in Ihrer Anwendung verhindern.

Wenn Sie eine neue Anwendung erstellen und als Container-/Serveranwendung fungieren möchten, wählen Sie diese Option im Dialogfeld "OLE-Optionen" im Anwendungs-Assistenten aus, und diese Unterstützung wird automatisch erstellt. Weitere Informationen finden Sie im Artikel "Übersicht: Erstellen eines ActiveX-Steuerelementcontainers". Informationen zu MFC-Beispielen finden Sie unter MFC-Beispiele.

Beachten Sie, dass Sie keine MDI-Anwendung in sich selbst einfügen können. Eine Anwendung, die ein Container/Server ist, kann nicht in sich selbst eingefügt werden, es sei denn, es handelt sich um eine SDI-Anwendung.

Mit dem Feature "Links zu eingebetteten Objekten" kann ein Benutzer ein Dokument mit einer OLE-Verknüpfung zu einem eingebetteten Objekt in Ihrer Containeranwendung erstellen. Erstellen Sie beispielsweise ein Dokument in einem Textverarbeitungsprogramm, das eine eingebettete Kalkulationstabelle enthält. Wenn Ihre Anwendung Links zu eingebetteten Objekten unterstützt, könnte sie einen Link zu der Kalkulationstabelle einfügen, die im Dokument des Textverarbeitungsprogramms enthalten ist. Mit diesem Feature kann Ihre Anwendung die in der Kalkulationstabelle enthaltenen Informationen verwenden, ohne zu wissen, wo der Textverarbeitungsauftrag ursprünglich erhalten wurde.

  1. Leiten Sie Ihre Dokumentklasse von COleLinkingDoc anstelle von COleDocument.

  2. Erstellen Sie eine OLE-Klassen-ID (CLSID) für Ihre Anwendung, indem Sie den Klassen-ID-Generator verwenden, der in den OLE-Entwicklungstools enthalten ist.

  3. Registrieren Sie die Anwendung bei OLE.

  4. Erstellen Sie ein COleTemplateServer Objekt als Mitglied Der Anwendungsklasse.

  5. Gehen Sie in der Memberfunktion Ihrer Anwendungsklasse InitInstance wie folgt vor:

    • Verbinden Ihr COleTemplateServer Objekt in Ihre Dokumentvorlagen ein, indem die Memberfunktion des ConnectTemplate Objekts aufgerufen wird.

    • Rufen Sie die COleTemplateServer::RegisterAll Memberfunktion auf, um alle Klassenobjekte beim OLE-System zu registrieren.

    • Rufen Sie COleTemplateServer::UpdateRegistry auf. Der einzige Parameter, UpdateRegistry der OAT_CONTAINER werden soll, wenn die Anwendung nicht mit der Option "/Embedded" gestartet wird. Dadurch wird die Anwendung als Container registriert, der Links zu eingebetteten Objekten unterstützen kann.

      Wenn die Anwendung mit der Option "/Eingebettet" gestartet wird, sollte das Standard Fenster nicht angezeigt werden, ähnlich wie bei einer Serveranwendung.

Das OCLIENT-Beispiel für MFC OLE implementiert dieses Feature. Ein Beispiel dafür finden Sie in der InitInstance Funktion im OCLIENT. CPP-Datei dieser Beispielanwendung.

Siehe auch

Container
Server