Udostępnij przez


Jak stworzyć obsługiwaczy ikon

Typ pliku często ma związaną z nim ikonę niestandardową, aby jego pliki można było łatwo rozpoznać je w Eksploratorze Windows. Najprostszym sposobem przypisania niestandardowej ikony do typu pliku jest zarejestrowanie pliku ikony. Jednak ikona zarejestrowana w ten sposób będzie taka sama dla wszystkich typów pliku. Możesz mieć znacznie większą elastyczność w przypisywaniu ikon do elementów typu pliku, stosując program obsługi ikon .

Obsługiwacz ikon to rodzaj obsługiwacza rozszerzeń powłoki, który umożliwia dynamiczne przypisywanie ikon elementom typu pliku. Za każdym razem, gdy zostanie wyświetlony plik określonego typu, system operacyjny wysyła zapytanie do programu obsługi w celu uzyskania odpowiedniej ikony. Na przykład program obsługi ikon może przypisać różne ikony do różnych elementów członkowskich typu pliku lub zmienić ikonę na podstawie bieżącego stanu pliku.

Ogólne procedury implementowania i rejestrowania programów obsługi rozszerzeń powłoki zostały omówione w Tworzenie programów obsługi rozszerzeń powłoki. Ten dokument koncentruje się na tych aspektach implementacji specyficznych dla procedur obsługi ikon.

Instrukcje

Krok 1. Implementowanie procedur obsługi ikon

Podobnie jak wszystkie obsługiwacze rozszerzeń powłoki, obsługiwacze ikon są obiektami modelu obiektów składników (COM) działającymi w procesie, implementowanymi jako biblioteki DLL. Muszą eksportować dwa interfejsy oprócz IUnknown: IPersistFile i IExtractIcon.

Powłoka inicjuje obsługę za pomocą interfejsu IPersistFile. Używa tego interfejsu do żądania identyfikatora klasy programu obsługi (CLSID) i udostępnia go z nazwą pliku. Pozostała część operacji odbywa się za pośrednictwem interfejsu IExtractIcon. Aby uzyskać ogólne omówienie sposobu implementacji obsług rozszerzeń powłoki, w tym interfejsu IPersistFile, zobacz Tworzenie obsług rozszerzeń powłoki. W pozostałej części tego dokumentu omówiono sposób implementowania interfejsu IExtractIcon.

Krok 2. Implementowanie interfejsu IExtractIcon

Po zainicjowaniu interfejsu powłoka używa interfejsu IExtractIcon obsług w celu zażądania odpowiedniej ikony. Interfejs ma dwie metody: IExtractIcon::GetIconLocation i IExtractIcon::Extract.

Ikony są identyfikowane przez ich lokalizację w systemie plików. Metoda IExtractIcon::GetIconLocation jest wywoływana w celu żądania tych informacji. Ustaw parametr szIconFile na nazwę pliku. Jeśli w pliku znajduje się więcej niż jedna ikona, ustaw piIndex na indeks ikony. Przypisz odpowiednie wartości do dwóch zmiennych flagi. Jeśli nie chcesz określić nazwy pliku lub jeśli nie chcesz, aby powłoka wyodrębniła ikonę, ustaw flagę GIL_NOTFILENAME w parametrze pwFlags. Nie trzeba przypisywać wartości do szIconFile, ale program obsługi musi podać uchwyty ikon, gdy powłoka wywołuje IExtractIcon::Extract.

Jeśli zwracasz nazwę pliku, powłoka zwykle próbuje załadować ikonę z jej pamięci podręcznej. Aby zapobiec ładowaniu buforowanej ikony, ustaw flagę GIL_DONTCACHE w parametrze pwFlags. Jeśli buforowana ikona nie zostanie załadowana, powłoka wywołuje IExtractIcon::Extract, aby uzyskać uchwyt ikony.

Jeśli plik i indeks zostały podane przez IExtractIcon::GetIconLocation, są one przekazywane do IExtractIcon::Extract w parametrze pszFile i parametrze nIconIndex. Jeśli zostanie podana nazwa pliku, komponent obsługi może zwrócić S_FALSE, aby Shell wyodrębnił ikonę. W przeciwnym razie program obsługi musi wyodrębnić lub w inny sposób utworzyć duże i małe ikony, a następnie przypisać uchwyty HICON do phiconLarge i phiconSmall parametrów. Powłoka systemu dodaje ikony do pamięci podręcznej, aby przyspieszyć kolejne wywołania procedury obsługującej.

Krok 3. Rejestrowanie procedur obsługi ikon

Gdy statycznie zarejestrować ikonę dla typu pliku , należy utworzyć podklucz DefaultIcon podklucz ProgID dla typu pliku. Jego wartość domyślna jest ustawiona na plik, który zawiera ikonę. Aby zarejestrować procedurę obsługi ikon, nadal musisz mieć podklucz DefaultIcon, ale jego wartość domyślna musi być ustawiona na "%1". Dodaj podklucz IconHandler do podklucza Shellex podklucza ProgID i ustaw jego wartość domyślną na postać ciągu identyfikatora CLSID GUID handlea. Aby zapoznać się z ogólnym omówieniem sposobu rejestrowania procedur obsługi rozszerzeń powłoki, zobacz Tworzenie procedur obsługi rozszerzeń powłoki.

Poniższy przykład modyfikuje wpis rejestru z Dostosowywanie ikon tak, aby typ pliku .myp używał teraz obsługi menu kontekstowego zamiast statycznie zdefiniowanej ikony.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = %1
      Shellex
         IconHandler
            (Default) = {The handler's CLSID GUID}

Tworzenie Programów Obsługi Rozszerzeń Powłoki

IPersistFile

IExtractIcon