Condividi tramite


Moniker elemento

Un'altra classe moniker implementata da OLE è il moniker dell'elemento, che può essere usato per identificare un oggetto contenuto in un altro oggetto. Un tipo di oggetto contenuto è un oggetto OLE incorporato in un documento composto. Un documento composto può identificare gli oggetti incorporati contenuti assegnando a ognuno un nome arbitrario, ad esempio "embedobj1", "embedobj2" e così via. Un altro tipo di oggetto contenuto è una selezione utente in un documento, ad esempio un intervallo di celle in un foglio di calcolo o un intervallo di caratteri in un documento di testo. Un oggetto costituito da una selezione viene chiamato pseudooggetto perché non viene considerato come un oggetto distinto finché un utente non contrassegna la selezione. Un foglio di calcolo potrebbe identificare un intervallo di celle usando un nome come "1A:7F", mentre un documento di elaborazione delle parole potrebbe identificare un intervallo di caratteri usando il nome di un segnalibro.

Un moniker dell'elemento è utile principalmente quando viene concatenato o composto con un altro moniker, uno che identifica il contenitore. Un moniker dell'elemento viene in genere creato e quindi composto su un moniker di file per creare l'equivalente di un percorso completo all'oggetto. Ad esempio, è possibile comporre il moniker di file "c:\work\report.doc" (che identifica l'oggetto contenitore) con il moniker "embedobj1" (che identifica un oggetto all'interno del contenitore) per formare il moniker "c:\work\report.doc\embedobj1", che identifica in modo univoco un particolare oggetto all'interno di un determinato file. È anche possibile concatenare moniker di elementi aggiuntivi per identificare gli oggetti annidati in modo approfondito. Ad esempio, se "embedobj1" è il nome di un oggetto foglio di calcolo, per identificare un determinato intervallo di celle in tale oggetto foglio di calcolo, è possibile aggiungere un altro moniker di elemento per creare un moniker che sarebbe l'equivalente di "c:\work\report.doc\embedobj1\1A:7F".

In combinazione con un moniker di file, un moniker dell'elemento costituisce un percorso completo. I moniker degli elementi estendono quindi la nozione di nomi di percorso oltre il file system, definendo i nomi dei percorsi per identificare singoli oggetti, non solo i file.

Esiste una differenza significativa tra un moniker di elemento e un moniker di file. Il percorso contenuto in un moniker di file è significativo per chiunque comprenda il file system, mentre il percorso parziale contenuto in un moniker di un elemento è significativo solo per un determinato contenitore. Tutti sanno a cosa si riferisce "c:\work\report.doc", ma solo un oggetto contenitore specifico sa a cosa fa riferimento "1A:7F". Un contenitore non può interpretare un moniker di elemento creato da un'altra applicazione; L'unico contenitore che conosce l'oggetto a cui fa riferimento un moniker dell'elemento è il contenitore che ha assegnato il moniker dell'elemento all'oggetto al primo posto. Per questo motivo, l'origine dell'oggetto denominato dalla combinazione di un moniker di file e elemento non solo deve implementare IPersistFile, per facilitare l'associazione del moniker del file, ma anche IOleItemContainer per facilitare la risoluzione del nome del moniker dell'elemento nell'oggetto appropriato, nel contesto di un file.

Il vantaggio dei moniker è che un utente che usa un moniker per individuare un oggetto non deve comprendere il nome contenuto nel moniker dell'elemento, purché il moniker dell'elemento faccia parte di un composito. In genere, non sarebbe opportuno che un moniker di elemento esista da solo. È invece necessario comporre un moniker di elemento in un moniker di file. Si chiamerebbe quindi IMoniker::BindToObject sul composito, che associa i singoli moniker al suo interno, interpretando i nomi.

Per creare un oggetto moniker dell'elemento e restituirne il puntatore al provider di moniker, OLE fornisce la funzione helper CreateItemMoniker. Questa funzione crea un oggetto moniker dell'elemento e ne restituisce il puntatore al provider.

Anti-moniker

Moniker di classe

Moniker compositi

Moniker di file

Moniker puntatore