#winapi #com
#winapi #com
Вопрос:
Учитывая ITEMID_CHILD
( ITEMIDLIST
), полученный из IEnumIDList::Next()
, который является перечислением IFolderView::Items()
, как преобразовать список элементов в индекс, который был бы необходим в чем-то вроде IFolderView::SelectItem()
?
PS Я знаю, что IFolderView::SelectAndPositionItems() существует, но этот вопрос специфичен для получения индекса (я не смог найти, где ::IndexOf()
существует)
ТИА!!
Комментарии:
1. используйте
IFolderView::Item
метод, если хотите позже выбрать элемент
Ответ №1:
Не существует прямого способа, предоставленного IFolderView
для получения индекса данного дочернего элемента ITEMIDLIST
. Вы должны запоминать индекс вручную при перечислении элементов папки с помощью IEnumIDList
. Или вы можете перебирать элементы, используя IFolderView::Item()
пока не найдете индекс, который возвращает соответствие ITEMIDLIST
.
Ответ №2:
Одним из обходных путей является использование IShellFolderView::UpdateObject
, передающее pidl в качестве первых двух аргументов. IShellFolderView::RefreshObject
также выглядело как опция, но для меня это возвращает E_NOTIMPL
.