Item Monikers
Eine weitere von OLE implementierte Moniker-Klasse ist der Elementmoniker, der verwendet werden kann, um ein Objekt zu identifizieren, das in einem anderen Objekt enthalten ist. Ein Typ von eigenständigen Objekten ist ein OLE-Objekt, das in ein zusammengesetztes Dokument eingebettet ist. Ein zusammengesetztes Dokument könnte die darin enthaltenen eingebetteten Objekte identifizieren, indem jedem ein beliebiger Name zugewiesen wird, z. B. "embedobj1", "embedobj2" usw. Ein anderer Typ von eigenständigen Objekten ist eine Benutzerauswahl in einem Dokument, z. B. ein Zellbereich in einer Kalkulationstabelle oder ein Zeichenbereich in einem Textdokument. Ein Objekt, das aus einer Auswahl besteht, wird als Pseudoobjekt bezeichnet, da es erst dann als eigenständiges Objekt behandelt wird, wenn ein Benutzer die Auswahl markiert. Ein Arbeitsblatt kann einen Zellbereich mit einem Namen wie "1A:7F" identifizieren, während ein Textverarbeitungsdokument einen Bereich von Zeichen mithilfe des Namens eines Lesezeichens identifiziert.
Ein Elementmoniker ist in erster Linie nützlich, wenn er mit einem anderen Moniker verkettet oder zusammengesetzt wird, der den Container identifiziert. Ein Elementmoniker wird normalerweise erstellt und dann (z. B.) auf einen Dateimoniker zusammengesetzt, um das Äquivalent eines vollständigen Pfads zum Objekt zu erstellen. Sie können beispielsweise den Dateimoniker "c:\work\report.doc" (der das Containerobjekt identifiziert) mit dem Elementmoniker "embedobj1" (der ein Objekt innerhalb des Containers identifiziert) zusammensetzen, um den Moniker "c:\work\report.doc\embedobj1" zu bilden, der ein bestimmtes Objekt in einer bestimmten Datei eindeutig identifiziert. Sie können auch zusätzliche Elementmoniker verketten, um tief geschachtelte Objekte zu identifizieren. Wenn z. B. "embedobj1" der Name eines Tabellenkalkulationsobjekts ist, können Sie einen bestimmten Zellbereich in diesem Tabellenkalkulationsobjekt anfügen, um einen anderen Elementmoniker anzufügen, um einen Moniker zu erstellen, der "c:\work\report.doc\embedobj1\1A:7F" entspricht.
In Kombination mit einem Dateimoniker bildet ein Elementmoniker einen vollständigen Pfad. Elementmoniker erweitern daher den Begriff der Pfadnamen über das Dateisystem hinaus und definieren Pfadnamen, um einzelne Objekte, nicht nur Dateien, zu identifizieren.
Es gibt einen erheblichen Unterschied zwischen einem Elementmoniker und einem Dateimoniker. Der in einem Dateimoniker enthaltene Pfad ist für jeden, der das Dateisystem versteht, von Bedeutung, während der in einem Elementmoniker enthaltene Teilpfad nur für einen bestimmten Container von Bedeutung ist. Jeder weiß, worauf sich "c:\work\report.doc" bezieht, aber nur ein bestimmtes Containerobjekt weiß, worauf sich "1A:7F" bezieht. Ein Container kann keinen Elementmoniker interpretieren, der von einer anderen Anwendung erstellt wurde. der einzige Container, der weiß, auf welches Objekt ein Elementmoniker verweist, ist der Container, der dem Objekt den Elementmoniker überhaupt zugewiesen hat. Aus diesem Grund muss die Quelle des Objekts, das durch die Kombination aus datei- und Elementmoniker benannt ist, nicht nur IPersistFile implementieren, um die Bindung des Dateimonikers zu erleichtern, sondern auch IOleItemContainer , um das Auflösen des Namens des Elementmonikers in das entsprechende Objekt im Kontext einer Datei zu erleichtern.
Der Vorteil von Monikern besteht darin, dass jemand, der einen Moniker zum Suchen eines Objekts verwendet, den Namen im Elementmoniker nicht verstehen muss, solange der Elementmoniker Teil eines Zusammengesetzten ist. Im Allgemeinen wäre es nicht sinnvoll, wenn ein Artikelmoniker eigenständig existiert. Stattdessen würden Sie einen Elementmoniker auf einen Dateimoniker verfassen. Sie würden dann IMoniker::BindToObject auf dem Zusammengesetzten aufrufen, das die einzelnen Moniker darin bindet und die Namen interpretiert.
Um ein Elementmoniker-Objekt zu erstellen und seinen Zeiger auf den Moniker-Anbieter zurückzugeben, stellt OLE die Hilfsfunktion CreateItemMoniker bereit. Diese Funktion erstellt ein Elementmonikerobjekt und gibt seinen Zeiger auf den Anbieter zurück.