Вот выдержка из документации Windows о функции SHGetFileInfo()
:
Вы должны вызывать эту функцию из фонового потока. Невыполнение этого требования может привести к тому, что пользовательский интерфейс перестанет отвечать на запросы.
Это относится и к извлечению значков папок?
Одно из наших приложений напоминает Windows Explorer, и мы преследуем две антагонистические цели: поддерживать как можно больше функций Windows Explorer и быть максимально быстрыми. Имея в виду последнее, я назначил каждой папке значок по умолчанию (полученный с помощью флага SHGFI_USEFILEATTRIBUTES
). Но через некоторое время оказалось, что некоторые наши клиенты используют собственные значки папок.
Итак, нужно ли создавать новые потоки для расчета значка для каждой папки или есть способ быстро извлечь значок папки в главном потоке, учитывая тот факт, что количество пользовательских значков папок незначительно?
Например, я думаю, например, способ извлечения только кэшированных значков может быть решением. Есть функция IShellItemImageFactory::GetImage()
, которая позволяет получать только кэшированные иконки, но, к сожалению, возвращает HBITMAP
вместо HICON
.