Как отобразить список объектов оболочки?

Я хочу отобразить совокупность элементов оболочки внутри моего элемента управления List View, собранных из разных папок, подобно тому, как работает механизм поиска файлов Explorer.

У меня такое чувство, что мне нужно использовать IShellFolderView::AddObject, но весь интерфейс устарело, и в любом случае я не могу понять, как на самом деле заставить это работать.

Как мне это сделать?


person user541686    schedule 29.08.2011    source источник


Ответы (2)


Поскольку вы настаиваете на «получении» объектов оболочки, я предполагаю, что вы не используете элемент управления представлением списка, который требует от вас написания собственной поддержки оболочки, как это делает CMFCShellListCtrl. Было бы довольно просто добавить поддержку нескольких папок, если вы уже написали код для отображения файлов из одной папки в элементе управления представлением списка.

Если вы используете элемент управления Explorer Browser, проверьте Образец проекта Hilo, он создает папку поиска с областью агрегации пользовательских библиотек. Возможно, вы сможете создать собственную коллекцию папок, используя интерфейс IObjectCollection объекта CLSID_EnumerableObjectCollection. Пример отображения папки поиска в элементе управления Explorer Browser см. в Пример поиска в браузере Explorer

person Sheng Jiang 蒋晟    schedule 29.08.2011

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

person Raymond Chen    schedule 29.08.2011
comment
Тогда они больше не являются объектами оболочки. Например. щелчок правой кнопкой мыши не работает, перетаскивание не работает, обнаружение изменений не работает и так далее и тому подобное... - person user541686; 29.08.2011
comment
Это для вас, чтобы подключиться. Если вы хотите управлять своим собственным списком, то вы несете ответственность за управление интерфейсом. Если вы хотите, чтобы интерфейсом управлял кто-то другой, используйте элемент управления ExplorerBrowser. Я предположил, что у вас уже есть рабочий список, в котором элементы поступают из одной папки, и вы хотите расширить его до нескольких папок. Извините за недопонимание. - person Raymond Chen; 29.08.2011