Monikers d’élément
Une autre classe moniker implémentée par OLE est le moniker d’élément, qui peut être utilisé pour identifier un objet contenu dans un autre objet. Un type d’objet autonome est un objet OLE incorporé dans un document composé. Un document composé peut identifier les objets incorporés qu’il contient en leur attribuant un nom arbitraire, tel que « embedobj1 », « embedobj2 », etc. Un autre type d’objet autonome est une sélection utilisateur dans un document, par exemple une plage de cellules dans une feuille de calcul ou une plage de caractères dans un document texte. Un objet qui se compose d’une sélection est appelé pseudo-objet , car il n’est pas traité comme un objet distinct tant qu’un utilisateur ne marque pas la sélection. Une feuille de calcul peut identifier une plage de cellules à l’aide d’un nom tel que « 1A:7F », tandis qu’un document de traitement de texte peut identifier une plage de caractères à l’aide du nom d’un signet.
Un moniker d’élément est principalement utile lorsqu’il est concaténé, ou composé, avec un autre moniker, un autre qui identifie le conteneur. Un moniker d’élément est généralement créé, puis composé dans (par exemple) un moniker de fichier pour créer l’équivalent d’un chemin d’accès complet à l’objet. Par exemple, vous pouvez composer le moniker de fichier « c:\work\report.doc » (qui identifie l’objet conteneur) avec le moniker d’élément « embedobj1 » (qui identifie un objet dans le conteneur) pour former le moniker « c:\work\report.doc\embedobj1 », qui identifie de manière unique un objet particulier dans un fichier particulier. Vous pouvez également concaténer des monikers d’éléments supplémentaires pour identifier des objets profondément imbriqués. Par exemple, si « embedobj1 » est le nom d’un objet de feuille de calcul, pour identifier une certaine plage de cellules dans cet objet de feuille de calcul, vous pouvez ajouter un autre moniker d’élément pour créer un moniker qui serait l’équivalent de « c:\work\report.doc\embedobj1\1A:7F ».
Lorsqu’il est combiné avec un moniker de fichier, un moniker d’élément forme un chemin d’accès complet. Les monikers d’élément étendent ainsi la notion de noms de chemins d’accès au-delà du système de fichiers, en définissant des noms de chemins d’accès pour identifier des objets individuels, et pas seulement des fichiers.
Il existe une différence significative entre un moniker d’élément et un moniker de fichier. Le chemin d’accès contenu dans un moniker de fichier est significatif pour toute personne qui comprend le système de fichiers, tandis que le chemin d’accès partiel contenu dans un moniker d’élément n’est significatif que pour un conteneur particulier. Tout le monde sait à quoi fait référence « c:\work\report.doc », mais un seul objet conteneur particulier sait à quoi « 1A:7F » fait référence. Un conteneur ne peut pas interpréter un moniker d’élément créé par une autre application ; le seul conteneur qui sait à quel objet est référencé par un moniker d’élément est le conteneur qui a affecté le moniker d’élément à l’objet en premier lieu. Pour cette raison, la source de l’objet nommé par la combinaison d’un moniker de fichier et d’élément doit non seulement implémenter IPersistFile pour faciliter la liaison du moniker de fichier, mais également IOleItemContainer pour faciliter la résolution du nom du moniker d’élément dans l’objet approprié, dans le contexte d’un fichier.
L’avantage des monikers est qu’une personne qui utilise un moniker pour localiser un objet n’a pas besoin de comprendre le nom contenu dans le moniker d’élément, tant que le moniker d’élément fait partie d’un composite. En règle générale, il n’est pas logique qu’un moniker d’élément existe seul. Au lieu de cela, vous devez composer un moniker d’élément sur un moniker de fichier. Vous appelez ensuite IMoniker::BindToObject sur le composite, qui lie les monikers individuels dans celui-ci, en interprétant les noms.
Pour créer un objet moniker d’élément et retourner son pointeur vers le fournisseur de moniker, OLE fournit la fonction d’assistance CreateItemMoniker. Cette fonction crée un objet moniker d’élément et retourne son pointeur vers le fournisseur.