Pictogramhandlers maken
Een bestandstype heeft vaak een aangepast pictogram dat eraan gekoppeld is, zodat bestanden gemakkelijk herkenbaar zijn in Windows Explorer. De eenvoudigste manier om een aangepast pictogram toe te wijzen aan een bestandstype, is door het bestand van het pictogram te registreren. Een pictogram dat op deze manier is geregistreerd, is echter hetzelfde voor alle leden van het bestandstype. U kunt veel meer flexibiliteit hebben bij het toewijzen van pictogrammen aan de leden van het bestandstype door een pictogramhandler te implementeren.
Een pictogramhandler is een type Shell-extensiehandler waarmee u pictogrammen dynamisch kunt toewijzen aan de leden van een bestandstype. Telkens wanneer een bestand van het type wordt weergegeven, voert de Shell een query uit op de handler voor het juiste pictogram. Een pictogramhandler kan bijvoorbeeld verschillende pictogrammen toewijzen aan verschillende leden van het bestandstype of het pictogram variëren op basis van de huidige status van het bestand.
De algemene procedures voor het implementeren en registreren van een Shell-extensie-handler worden besproken in Shell Extension Handlers maken. Dit document richt zich op die aspecten van de implementatie die specifiek zijn voor pictogramhandlers.
- Pictogramhandlers implementeren
- de IExtractIcon Interface implementeren
- Pictogrambeheerder registreren
- Verwante onderwerpen
Aanwijzingen
Stap 1: Pictogramhandlers implementeren
Zoals bij alle Shell-extensiehandlers, zijn pictogramhandlers COM-objecten (Component Object Model) die als DLL's zijn geïmplementeerd. Ze moeten naast IUnknown-twee interfaces exporteren: IPersistFile en IExtractIcon.
De Shell initialiseert de handler via de IPersistFile interface. Deze interface gebruikt deze interface om de klasse-id (CLSID) van de handler aan te vragen en deze te voorzien van de naam van het bestand. De rest van de bewerking vindt plaats via de IExtractIcon interface. Zie Shell-extensiehandlers makenvoor een algemeen overzicht van hoe Shell-extensiehandlers worden geïmplementeerd, inclusief de IPersistFile interface. In de rest van dit document wordt besproken hoe u de interface IExtractIcon implementeert.
Stap 2: de IExtractIcon Interface implementeren
Nadat de interface is geïnitialiseerd, gebruikt de Shell de IExtractIcon interface van de handler om het juiste pictogram aan te vragen. De interface heeft twee methoden: IExtractIcon::GetIconLocation en IExtractIcon::Extract.
Pictogrammen worden geïdentificeerd door hun locatie in het bestandssysteem. De methode IExtractIcon::GetIconLocation wordt aangeroepen om deze informatie aan te vragen. Stel de parameter szIconFile in op de bestandsnaam. Als er meer dan één pictogram in het bestand staat, stelt u piIndex in op de index van het pictogram. Wijs de juiste waarden toe aan de twee vlagvariabelen. Als u geen bestandsnaam wilt opgeven of als u niet wilt dat de Shell het pictogram ophaalt, stelt u de GIL_NOTFILENAME vlag in de parameter pwFlags. U hoeft geen waarde toe te wijzen aan szIconFile, maar de handler moet pictogramgrepen opgeven wanneer de Shell IExtractIcon::Extractaanroept.
Als u een bestandsnaam retourneert, probeert de Shell normaal gesproken het pictogram uit de cache te laden. Als u wilt voorkomen dat een pictogram in de cache wordt geladen, stelt u de GIL_DONTCACHE vlag in de parameter pwFlags. Als er geen pictogram in de cache is geladen, roept de Shell IExtractIcon::Extract aan om de pictogramgreep aan te vragen.
Als een bestand en index zijn opgegeven door IExtractIcon::GetIconLocation, worden ze doorgegeven aan IExtractIcon::Extract in de pszFile en nIconIndex parameters. Als er een bestandsnaam is opgegeven, kan uw handler S_FALSE retourneren om het pictogram van de Shell te extraheren. Anders moet uw handler grote en kleine pictogrammen extraheren of anderszins produceren en hun HICON-ingangen toewijzen aan de phiconLarge- en phiconSmall parameters. De Shell voegt de pictogrammen toe aan de cache om volgende aanroepen naar de handler te versnellen.
Stap 3: Pictogramhandlers registreren
Wanneer u statisch een pictogram voor een bestandstype, maakt u een DefaultIcon subsleutel onder de ProgID voor het bestandstype. De standaardwaarde is ingesteld op het bestand dat het pictogram bevat. Als u een pictogramhandler wilt registreren, moet u nog steeds de subsleutel DefaultIcon hebben, maar de standaardwaarde moet worden ingesteld op '%1'. Voeg een IconHandler subsleutel toe aan de subsleutel Shellex subsleutel van de ProgID-subsleutel en stel de standaardwaarde in op de tekenreeksvorm van de CLSID-GUID van de handler. Voor een algemene bespreking over hoe Shell-extensiehandlers te registreren, zie Shell-extensiehandlers maken.
In het volgende voorbeeld wordt de registervermelding gewijzigd vanuit Pictogrammen aanpassen, zodat het .myp-bestandstype nu een snelmenuhandler gebruikt in plaats van een statisch gedefinieerd pictogram.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = %1
Shellex
IconHandler
(Default) = {The handler's CLSID GUID}
Verwante onderwerpen