2014-01-07 3 views
1

Я разрабатываю расширение пространства имен, которое дает виртуальный вид файлов на сервере. В этом представлении мне нужно предоставить разные состояния (в использовании, офлайн, вне синхронизации и т. Д.) Файла с использованием оверлейных значков.icon overlay handlers для расширения пространства имен

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

Я вижу, что IShellIconOverlayIdentifier :: IsMemberOf() и другие функции вызывается только при доступе к файлам в обычной файловой системе, то есть c: \, d: \ и т. Д. Когда я просматриваю расширение пространства имен, эти вызовы не являются вообще называется. Почему это? Как реализовать наложения для объектов в расширении пространства имен?

С уважением, Мадху

ответ

2

Единственный способ добавить значок наложения, это реализовать IShellIconOverlay в вашем NSE. Но проблема в том, что IShellIconOverlay.GetOverlayIndex и IShellIconOverlay.GetOverlayIconIndex должны возвращать значки, полученные от SHELL Список изображений. Оверлейные значки из списка изображений оболочки можно получить с помощью функции SHGetIconOverlayIndex. И есть NO способ добавить дополнительный значок наложения в список изображений оболочки.

Если вы хотите использовать стандартные значки наложения, такие как ссылки или общие значки, используйте SHGetIconOverlayIndex. Но если вы хотите использовать пользовательские значки, вы должны использовать «взломать». Hack - это просто дополнительное расширение оболочки оболочки. Только расширение оболочки наложения может добавить дополнительный значок наложения в список изображений оболочки. В IShellIconOverlayIdentifier.GetOverlayInfo вы вернете свой значок и индекс, IShellIconOverlayIdentifier.IsMemberOf всегда вернет S_FALSE. Внутри NSE в IShellIconOverlay_GetOverlayIndex вы вызовете SHGetIconOverlayIndex с вашим значком и индексом.

NSE overlay icon

Вы должны использовать отдельное расширение наложения оболочки для каждого значка. Но не забывайте, что Windows имеет ограничение на максимальное количество расширений оболочки overlay, зарегистрированных в системе. Я не помню точного номера, но это около 15.

Смежные вопросы