Реализация обработчиков наложения значков

Обработчики наложения значков — это объекты 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.

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