Como criar manipuladores de ícones
Um tipo de arquivo geralmente tem um ícone personalizado associado a ele, para tornar seus membros facilmente reconhecíveis no Windows Explorer. A maneira mais simples de atribuir um ícone personalizado a um tipo de arquivo é registrar o arquivo do ícone. No entanto, um ícone registado desta forma será o mesmo para todos os membros do tipo de ficheiro. Você pode ter muito mais flexibilidade na atribuição de ícones aos membros do tipo de arquivo implementando um manipulador de ícones .
Um manipulador de ícones é um tipo de manipulador de extensão do Shell que permite atribuir ícones dinamicamente aos membros de um tipo de arquivo. Sempre que um arquivo do tipo é exibido, o Shell consulta o manipulador para obter o ícone apropriado. Por exemplo, um manipulador de ícones pode atribuir ícones diferentes a diferentes membros do tipo de arquivo ou variar o ícone com base no estado atual do arquivo.
Os procedimentos gerais para implementar e registrar um manipulador de extensão Shell são discutidos em Criando manipuladores de extensão Shell. Este documento se concentra nos aspetos da implementação que são específicos para manipuladores de ícones.
- Implementando manipuladores de ícones
- Implementando a interface IExtractIcon
- Registrando manipuladores de ícones
- Tópicos relacionados
Instruções
Etapa 1: Implementando manipuladores de ícones
Como todos os manipuladores de extensão do Shell, os manipuladores de ícones são objetos COM (Component Object Model) em processo implementados como DLLs. Eles devem exportar duas interfaces além IUnknown: IPersistFile e IExtractIcon.
O Shell inicializa o manipulador por meio de sua interface IPersistFile. Ele usa essa interface para solicitar o identificador de classe do manipulador (CLSID) e fornece o nome do arquivo. O resto da operação ocorre através do IExtractIcon interface. Para obter uma discussão geral sobre como implementar manipuladores de extensão do Shell, incluindo a interface IPersistFile, consulte Criando manipuladores de extensão do Shell. O restante deste documento discute como implementar o IExtractIcon interface.
Etapa 2: Implementando a interface IExtractIcon
Depois que a interface é inicializada, o Shell utiliza a interface IExtractIcon do manipulador para solicitar o ícone apropriado. A interface tem dois métodos: IExtractIcon::GetIconLocation e IExtractIcon::Extract.
Os ícones são identificados pela sua localização no sistema de ficheiros. O método IExtractIcon::GetIconLocation é chamado para solicitar essas informações. Defina o parâmetro szIconFile para o nome do arquivo. Se houver mais de um ícone no arquivo, defina piIndex para o índice do ícone. Atribua valores apropriados às duas variáveis de sinalizador. Se você não quiser especificar um nome de arquivo ou se não quiser que o Shell extraia o ícone, defina o sinalizador GIL_NOTFILENAME no parâmetro pwFlags. Não é necessário atribuir um valor a szIconFile, mas o manipulador deve fornecer identificadores de ícone quando o Shell chama IExtractIcon::Extract.
Se você retornar um nome de arquivo, o Shell normalmente tentará carregar o ícone de seu cache. Para impedir o carregamento de um ícone armazenado em cache, defina o sinalizador GIL_DONTCACHE no parâmetro pwFlags. Se um ícone armazenado em cache não for carregado, o Shell chamará IExtractIcon::Extract para solicitar o identificador de ícone.
Se um arquivo e um índice foram especificados por IExtractIcon::GetIconLocation , eles são passados para IExtractIcon::Extract nos parâmetros pszFile e nIconIndex, respectivamente. Se um nome de arquivo for fornecido, seu manipulador poderá retornar S_FALSE para que o Shell extraia o ícone. Caso contrário, seu manipulador deve extrair ou produzir ícones grandes e pequenos e atribuir suas alças HICON aos parâmetros phiconLarge e phiconSmall. O Shell adiciona os ícones ao seu cache para agilizar as chamadas subsequentes para o manipulador.
Etapa 3: Registrando manipuladores de ícones
Quando você registrar estaticamente um ícone para um tipo de arquivo , você cria uma subchave DefaultIcon sob o ProgID para o tipo de arquivo. Seu valor padrão é definido como o arquivo que contém o ícone. Para registar um gestor de ícones, deve-se ainda ter a subchave DefaultIcon, mas o seu valor predefinido deve ser configurado para "%1". Adicione uma subchave IconHandler à subchave Shellex da subchave ProgID e defina o seu valor padrão para a forma em cadeia de caracteres do GUID CLSID do manipulador. Para obter uma discussão geral sobre como registrar manipuladores de extensão do Shell, consulte Criando manipuladores de extensão do Shell.
O exemplo a seguir modifica a entrada do Registro do Customizing Icons para que o tipo de arquivo .myp agora use um manipulador de menu de atalho em vez de um ícone definido estaticamente.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = %1
Shellex
IconHandler
(Default) = {The handler's CLSID GUID}
Tópicos relacionados