Поделиться через


Как реализовать обработчики наложения значков

Обработчики наложения значков — это объекты объектной модели компонентов (COM), реализованные как библиотеки DLL. Они экспортируют один интерфейс в дополнение к IUnknown: IShellIconOverlayIdentifier. Этот интерфейс имеет три метода: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriorityи IShellIconOverlayIdentifier::IsMemberOf.

Инструкции

Шаг 1. Реализация GetOverlayInfo

Метод GetOverlayInfo сначала вызывается во время инициализации. Метод возвращает полный путь к файлу, содержащему изображение накладываемого значка, и его индекс, начинающийся с нуля, в этом файле. Затем оболочка добавляет изображение в список системных образов. Наложения значков могут содержаться в любом из стандартных типов файлов, включая .exe, .dllи .ico.

После завершения инициализации оболочка вызывает GetOverlayInfo, когда необходимо отобразить наложение значка обработчика. Метод должен возвращать то же имя файла и индекс, который он сделал во время инициализации. Хотя оболочка использует образ, кэшированный в списке системных образов, а не загружает изображение из файла, значок по-прежнему определяется его именем и индексом.

Шаг 2. Реализация GetPriority

Метод GetPriority вызывается только во время инициализации. Он назначает значение приоритета значку обработчика наложения. Значение может варьироваться от нуля до 100, где 100 является самым низким приоритетом. Цель этого значения приоритета — помочь оболочке устранить конфликт, возникающий при указании нескольких наложений значков для одного объекта. В оболочке сначала используется внутренний набор правил, чтобы определить наложение значка с наивысшим приоритетом. Если эти правила не разрешают конфликт, значения, назначенные для значков накладок, в GetPriority определяют приоритет.

Значение приоритета, заданное GetPriority, не является надежным способом разрешения конфликтов между несвязанными обработчиками наложения значков. Обработчику не удается определить, какие значения приоритета используют другие обработчики. Как правило, значение должно быть равно нулю. Однако значение приоритета полезно, когда вы реализовали два или нескольких обработчика наложения значков, которые могут запрашивать наложение значков на один и тот же объект. Присвоив значения приоритета соответствующим образом, можно указать, какие из запрошенных наложений значков будут отображаться.

Шаг 3. Реализация IsMemberOf

Оболочка вызывает метод IsMemberOf, чтобы определить, должна ли она отображать наложение значка обработчика для определенного объекта. Оболочка задает объект, передав его имя методу. Если обработчик хочет отобразить свой значок наложения, IsMemberOf возвращает S_OK. В противном случае возвращается S_FALSE.

Обработчики наложения значков обычно предназначены для работы с определенной группой файлов. Типичным примером является файл типа , обозначаемый конкретным расширением имени файла. Обработчик наложения значков может запрашивать наложение значка для всех файлов типа файла. Некоторые обработчики запрашивают наложение значка, только если файл определенного типа находится в определенном состоянии. Однако обработчики наложения значков могут запрашивать наложение значков для любого выбранного объекта.