Расширение ExplorerBrowser из Windows API Code Pack для отображения не файловых файлов - PullRequest
1 голос
/ 27 октября 2010

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

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

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

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

1 Ответ

1 голос
/ 27 октября 2010

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

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

...