COleLinkingDoc-Klasse
Die Basisklasse für OLE-Containerdokumente, die das Verknüpfen mit den enthaltenen eingebetteten Elementen unterstützt.
class COleLinkingDoc : public COleDocument
Name | Beschreibung |
---|---|
COleLinkingDoc::COleLinkingDoc | Erstellt ein COleLinkingDoc -Objekt. |
Name | Beschreibung |
---|---|
COleLinkingDoc::Register | Registriert das Dokument mit den OLE-System-DLLs. |
COleLinkingDoc::Revoke | Widerruft die Registrierung des Dokuments. |
Name | Beschreibung |
---|---|
COleLinkingDoc::OnFindEmbeddedItem | Sucht das angegebene eingebettete Element. |
COleLinkingDoc::OnGetLinkedItem | Sucht das angegebene verknüpfte Element. |
Eine Containeranwendung, die das Verknüpfen mit eingebetteten Elementen unterstützt, wird als "Linkcontainer" bezeichnet. Die OCLIENT-Beispielanwendung ist ein Beispiel für einen Linkcontainer.
Wenn es sich bei der Quelle eines verknüpften Elements um ein eingebettetes Element in einem anderen Dokument handelt, muss dieses Dokument geladen werden, damit das eingebettete Element bearbeitet werden kann. Aus diesem Grund muss ein Linkcontainer von einer anderen Containeranwendung gestartet werden können, wenn der Benutzer die Quelle eines verknüpften Elements bearbeiten möchte. Ihre Anwendung muss auch die COleTemplateServer-Klasse verwenden, damit dokumente beim programmgesteuerten Start erstellt werden können.
Um den Container zu einem Linkcontainer zu machen, leiten Sie Ihre Dokumentklasse von "COleDocument" ab.COleLinkingDoc
Wie bei jedem anderen OLE-Container müssen Sie Ihre Klasse zum Speichern der systemeigenen Daten der Anwendung sowie für eingebettete oder verknüpfte Elemente entwerfen. Außerdem müssen Sie Datenstrukturen zum Speichern ihrer systemeigenen Daten entwerfen. Wenn Sie eine CDocItem
abgeleitete Klasse für die systemeigenen Daten Ihrer Anwendung definieren, können Sie die Schnittstelle verwenden, die durch COleDocument
das Speichern ihrer systemeigenen Daten sowie Ihrer OLE-Daten definiert wird.
Um zuzulassen, dass Ihre Anwendung programmgesteuert von einem anderen Container gestartet wird, deklarieren Sie ein COleTemplateServer
Objekt als Mitglied der abgeleiteten Klasse Ihrer Anwendung CWinApp
:
class COleContainerApp : public CWinApp
{
protected:
COleTemplateServer m_server;
// remainder of class declaration omitted
Erstellen Sie in der InitInstance
Memberfunktion der CWinApp
abgeleiteten Klasse eine Dokumentvorlage, und geben Sie die COleLinkingDoc
abgeleitete Klasse als Dokumentklasse an:
// CMyLinkDoc is derived from COleLinkingDoc
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate(IDR_LINKDOCTYPE,
RUNTIME_CLASS(CMyLinkDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMyLinkView));
if (!pDocTemplate)
return FALSE;
pDocTemplate->SetContainerInfo(IDR_OLECONTTYPE_CNTR_IP);
AddDocTemplate(pDocTemplate);
Verbinden Sie Ihr COleTemplateServer
Objekt mit Ihren Dokumentvorlagen, indem Sie die Memberfunktion des ConnectTemplate
Objekts aufrufen und alle Klassenobjekte mit dem OLE-System registrieren, indem Sie Folgendes aufrufen COleTemplateServer::RegisterAll
:
m_server.ConnectTemplate(clsid, pDocTemplate, FALSE);
COleTemplateServer::RegisterAll();
Ein Beispiel CWinApp
für abgeleitete Klassendefinition und InitInstance
-funktion finden Sie unter OCLIENT. H und OCLIENT. CPP im MFC-Beispiel-OCLIENT.
Weitere Informationen zur Verwendung COleLinkingDoc
finden Sie in den Artikeln Container: Implementieren eines Containers und Containers: Erweiterte Features.
COleLinkingDoc
Kopfzeile: afxole.h
Erstellt ein COleLinkingDoc
Objekt, ohne mit der Kommunikation mit den OLE-System-DLLs zu beginnen.
COleLinkingDoc();
Sie müssen die Register
Memberfunktion aufrufen, um OLE darüber zu informieren, dass das Dokument geöffnet ist.
Wird vom Framework aufgerufen, um zu bestimmen, ob das Dokument ein eingebettetes OLE-Element mit dem angegebenen Namen enthält.
virtual COleClientItem* OnFindEmbeddedItem(LPCTSTR lpszItemName);
lpszItemName
Zeiger auf den Namen des angeforderten eingebetteten OLE-Elements.
Ein Zeiger auf das angegebene Element; NULL, wenn das Element nicht gefunden wird.
Die Standardimplementierung durchsucht die Liste der eingebetteten Elemente für ein Element mit dem angegebenen Namen (bei dem Namensvergleich wird die Groß-/Kleinschreibung beachtet). Überschreiben Sie diese Funktion, wenn Sie über eine eigene Methode zum Speichern oder Benennen eingebetteter OLE-Elemente verfügen.
Wird vom Framework aufgerufen, um zu überprüfen, ob das Dokument ein verknüpftes Serverelement mit dem angegebenen Namen enthält.
virtual COleServerItem* OnGetLinkedItem(LPCTSTR lpszItemName);
lpszItemName
Zeigen Sie auf den Namen des verknüpften OLE-Elements, das angefordert wurde.
Ein Zeiger auf das angegebene Element; NULL, wenn das Element nicht gefunden wird.
Die Standardimplementierung COleLinkingDoc
gibt immer NULL zurück. Diese Funktion wird in der abgeleiteten Klasse COleServerDoc
außer Kraft gesetzt, um die Liste der OLE-Serverelemente nach einem verknüpften Element mit dem angegebenen Namen zu durchsuchen (bei dem Namensvergleich wird die Groß-/Kleinschreibung beachtet). Überschreiben Sie diese Funktion, wenn Sie ihre eigene Methode zum Speichern oder Abrufen verknüpfter Serverelemente implementiert haben.
Informiert die OLE-System-DLLs, dass das Dokument geöffnet ist.
BOOL Register(
COleObjectFactory* pFactory,
LPCTSTR lpszPathName);
pFactory
Zeiger auf ein OLE-Factoryobjekt (kann NULL sein).
lpszPathName
Zeigen Sie auf den vollqualifizierten Pfad des Containerdokuments.
Nonzero, wenn das Dokument erfolgreich registriert wurde; andernfalls 0.
Rufen Sie diese Funktion beim Erstellen oder Öffnen einer benannten Datei auf, um das Dokument bei den OLE-System-DLLs zu registrieren. Diese Funktion muss nicht aufgerufen werden, wenn das Dokument ein eingebettetes Element darstellt.
Wenn Sie in Ihrer Anwendung arbeiten COleTemplateServer
, Register
wird sie durch COleLinkingDoc
die Implementierung von OnNewDocument
, OnOpenDocument
und OnSaveDocument
.
Informiert die OLE-System-DLLs, dass das Dokument nicht mehr geöffnet ist.
void Revoke();
Rufen Sie diese Funktion auf, um die Registrierung des Dokuments mit den OLE-System-DLLs zu widerrufen.
Sie sollten diese Funktion aufrufen, wenn Sie eine benannte Datei schließen, sie aber in der Regel nicht direkt aufrufen müssen. Revoke
wird für Sie durch COleLinkingDoc
die Implementierung von OnCloseDocument
, , OnNewDocument
, OnOpenDocument
und OnSaveDocument
.
MFC-Beispiel-OCLIENT
COleDocument-Klasse
Hierarchiediagramm
CDocTemplate-Klasse