Расширение ExplorerBrowser из пакета кода Windows API для отображения файлов, не являющихся файловой системой.

Я пишу программу WPF на С#, которая должна отображать набор файлов в файловом браузере для конечного пользователя. Элемент управления ExplorerBrowser, найденный внутри Microsoft Windows API CodePack, содержит большую часть необходимых мне функций... например. миниатюры разных размеров, сортировка, просмотр и т. д.

Загвоздка в том, что файлы поступают не с диска, а доступны по специальному сетевому протоколу передачи.

Первоначально я думал, что могу просто расширить класс ShellObjectContainer и классы ShellObject, чтобы предоставить необходимые мне функции, по существу создав адаптер. Однако я столкнулся с трудностями, потому что эти классы используют внутренние конструкторы.

В целом, похоже, что этот API довольно враждебен расширению, есть ли способ расширить эти компоненты, чтобы они делали то, что мне нужно, или мне лучше перестроить большую часть функциональности ExplorerBrowsers, создав собственный компонент WPF, возможно, путем расширения ListBox?


person Rick Moynihan    schedule 27.10.2010    source источник


Ответы (1)


Да, это определенно не было сделано для расширения. Трудно понять, как вы могли бы вообще куда-то попасть, если бы вы не создали собственное расширение пространства имен оболочки. Чтобы его можно было просмотреть в окне оболочки. Это довольно жестоко в управляемом коде, COM-интерфейсы оболочки, производные от IUnknown, очень сложны в использовании. Это то, что делают классы-оболочки в пакете кода API, чтобы получить окно браузера в управляемой программе.

Создание расширения пространства имен оболочки является лучшим решением, ваши пользовательские файлы также будут видны в обычном окне проводника. Но напишите такой код на C++, потому что гораздо проще запустить код COM и избежать внедрения CLR в любую программу, которая использует диалоговое окно File + Open. Хотя теперь это технически поддерживается .NET 4.0.

person Hans Passant    schedule 27.10.2010