Item Monikers
Outra classe de moniker implementada pelo OLE é o moniker de item, que pode ser usado para identificar um objeto contido em outro objeto. Um tipo de objeto contido é um objeto OLE incorporado em um documento composto. Um documento composto poderia identificar os objetos incorporados que ele contém atribuindo a cada um um nome arbitrário, como "embedobj1", "embedobj2" e assim por diante. Outro tipo de objeto contido é uma seleção de usuário em um documento, como um intervalo de células em uma planilha ou um intervalo de caracteres em um documento de texto. Um objeto que consiste em uma seleção é chamado de pseudoobjeto porque não é tratado como um objeto distinto até que um usuário marque a seleção. Uma planilha pode identificar um intervalo de células usando um nome como "1A:7F", enquanto um documento de processamento de texto pode identificar um intervalo de caracteres usando o nome de um indicador.
Um apelido de item é útil principalmente quando concatenado, ou composto, com outro apelido, que identifica o recipiente. Um moniker de item geralmente é criado e, em seguida, composto em (por exemplo) um moniker de arquivo para criar o equivalente a um caminho completo para o objeto. Por exemplo, você pode compor o moniker de arquivo "c:\work\report.doc" (que identifica o objeto de contêiner) com o moniker de item "embedobj1" (que identifica um objeto dentro do contêiner) para formar o moniker "c:\work\report.doc\embedobj1", que identifica exclusivamente um objeto específico dentro de um arquivo específico. Você também pode concatenar apelidos de item adicionais para identificar objetos profundamente aninhados. Por exemplo, se "embedobj1" for o nome de um objeto de planilha, para identificar um determinado intervalo de células nesse objeto de planilha, você poderá acrescentar outro moniker de item para criar um moniker que seria o equivalente a "c:\work\report.doc\embedobj1\1A:7F".
Quando combinado com um moniker de arquivo, um moniker de item forma um caminho completo. Os monikers de item, portanto, estendem a noção de nomes de caminho para além do sistema de arquivos, definindo nomes de caminho para identificar objetos individuais, não apenas arquivos.
Há uma diferença significativa entre um apelido de item e um apelido de arquivo. O caminho contido em um moniker de arquivo é significativo para qualquer pessoa que entenda o sistema de arquivos, enquanto o caminho parcial contido em um moniker de item é significativo apenas para um contêiner específico. Todo mundo sabe a que "c:\work\report.doc" se refere, mas apenas um objeto de contêiner em particular sabe a que "1A:7F" se refere. Um contêiner não pode interpretar um moniker de item criado por outro aplicativo; O único contêiner que sabe qual objeto é referido por um moniker de item é o contêiner que atribuiu o moniker de item ao objeto em primeiro lugar. Por esse motivo, a origem do objeto nomeado pela combinação de um moniker de arquivo e item deve não apenas implementar IPersistFile, para facilitar a vinculação do moniker de arquivo, mas também IOleItemContainer para facilitar a resolução do nome do moniker de item no objeto apropriado, no contexto de um arquivo.
A vantagem dos apelidos é que alguém que usa um apelido para localizar um objeto não precisa entender o nome contido no apelido do item, desde que o apelido do item faça parte de um composto. Geralmente, não faria sentido que um apelido de item existisse por conta própria. Em vez disso, você comporia um moniker de item em um moniker de arquivo. Em seguida, você chamaria IMoniker::BindToObject no composto, que vincula os apelidos individuais dentro dele, interpretando os nomes.
Para criar um objeto de moniker de item e retornar seu ponteiro para o provedor de moniker, o OLE fornece a função auxiliar CreateItemMoniker. Essa função cria um objeto de moniker de item e retorna seu ponteiro para o provedor.
Tópicos relacionados