Получить индекс из списка элементов?

#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 .