Контрол Дерево файловой системы.
От: programmater  
Дата: 25.10.04 16:06
Оценка:
Люди, помогите человеку, знакомому с COM только теоретически воткнуть окно TreeView файловой системы (как левая панель Windows Explorer, а также в ACDSee и большинстве CD-писалок или внутренний контент диалога SHBrowseForFolder). Понимаю, что это можно сделать и без всяких-там COM-компонентов (затолкать к себе обычный TreeView и вручную построить дерево файловой системы, попутно выдёргивая иконки из Shell32.dll), но что-то мне подсказывает, что такой компонет существует в системе — уж больно одинаково ведут себя перечисленные программы.
С WebBrowser я запутался. Подскажите плиз, какой Instance надо Криейтить, какой интерфейс от него получать и т.д. Также понимаю, что, если учесть мою нелюбовь ко всяким MFC и VCL и патологическое стремление писать всё исключительно ни чистеньком WIn32 API, то задача становится и вовсе нереальной. Но уж больно хочется . Помогите разобраться.
Re: Контрол Дерево файловой системы.
От: algol Россия about:blank
Дата: 25.10.04 16:16
Оценка:
Здравствуйте, programmater, Вы писали:

P>Люди, помогите человеку, знакомому с COM только теоретически воткнуть окно TreeView файловой системы (как левая панель Windows Explorer, а также в ACDSee и большинстве CD-писалок или внутренний контент диалога SHBrowseForFolder). Понимаю, что это можно сделать и без всяких-там COM-компонентов (затолкать к себе обычный TreeView и вручную построить дерево файловой системы, попутно выдёргивая иконки из Shell32.dll), но что-то мне подсказывает, что такой компонет существует в системе — уж больно одинаково ведут себя перечисленные программы.


ShellFolderTree
CShellTreeCtrl
здесь (не поддерживает namespace, только диски).
Re[2]: Контрол Дерево файловой системы.
От: programmater  
Дата: 26.10.04 10:40
Оценка:
algol, Спасибо.
Но это не совсем то, что я хотел. Это как раз и есть "затолкать к себе обычный TreeView и вручную построить дерево файловой системы", просто это уже сделал кто-то за меня. Меня интересует другое, а именно как выдернуть этот контрол из эксплорера. Вот Смотрите. Берём обычный WinAmp. Смотрим загруженные Dll после запуска (список не привожу — не суть важно). Потом в плейлисте нажимаем на кнопочку Add->AddDid, появляется ShBrowseForFolder диалог. И — опаньки — в списке загруженных Dll откуда ни возьмись SHOWDOCVW.Dll и MyDocs.dll. А ведь раньше не было! Т.е. этот диалог является "обёрткой" каког-то COM компонента. Вот этот компонент я и хочу вытащить из системы(не устраивает меня диалог, нужно непосредственно на форму поместить). Кто-нибудь знает, как это сделать?
Re[3]: Контрол Дерево файловой системы.
От: algol Россия about:blank
Дата: 26.10.04 14:24
Оценка:
Здравствуйте, programmater, Вы писали:

P> Но это не совсем то, что я хотел. Это как раз и есть "затолкать к себе обычный TreeView и вручную построить дерево файловой системы", просто это уже сделал кто-то за меня. Меня интересует другое, а именно как выдернуть этот контрол из эксплорера.

P> Т.е. этот диалог является "обёрткой" каког-то COM компонента. Вот этот компонент я и хочу вытащить из системы(не устраивает меня диалог, нужно непосредственно на форму поместить). Кто-нибудь знает, как это сделать?

Нет такого компонента, поэтому все строят дерево сами. В BrowseForFolder и Эксплорере Spy++ показывает обычный SysTreeView32.
Re[4]: Контрол Дерево файловой системы.
От: NKZ  
Дата: 26.10.04 14:41
Оценка:
Здравствуйте, algol, Вы писали:

A>Нет такого компонента, поэтому все строят дерево сами. В BrowseForFolder и Эксплорере Spy++ показывает обычный SysTreeView32.


Копай в сторону IShellBrowser
здесь
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re: Контрол Дерево файловой системы.
От: programmater  
Дата: 28.10.04 09:00
Оценка:
Спасибо всем ответившим.
Убедили, нет в системе такого контрола, все пишут свои. А жаль .
"Копай в сторону IShellBrowser" — ага, я тоже так подумал. Первое, что я сделал, это
CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...)
Каково же было моё разочарование, когда мне вернулось E_NOINTERFACE. А дело в том, что IShellBrowser — это интерфейс обратного вызова, который реализовать должен я, и ни одна собака в системе его не имплементит .
Ладно, используя любезно предоставленные ссылки на примеры, слепил свой контрол (ну не люблю MFC, и всё — сделал на чистом API). И тут такой эффект: когда энумератор (IShellFolder::EnumObjects(...,&IEnmumIdl)) "добирается" (вызовами IEnmumIdl->Next) до папки "мои документы", то, помимо загрузки MYDOCS.dll и SHDOCVW.dll какая-то зараза создаёт неизвестный мне тред, который живёт в моём процессе своей жизнью и делает непонятно что. Когда я завершаю своё приложение, этот тред висит ещё несколько секунд, потом выходит. Вопросы:
Кто и зачем этот тред создаёт?
Как с этим бороться (или как этим процессом управлять)?
Как прибить этот тред, когда мне интерфейс с "мои документы" уже не нужен (например, при уничтожении дерева)?
Re: Контрол Дерево файловой системы.
От: programmater  
Дата: 28.10.04 09:04
Оценка:
К предыдущему сообщению:
не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а
CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...
Re[2]: Контрол Дерево файловой системы.
От: NKZ  
Дата: 28.10.04 10:03
Оценка:
Здравствуйте, programmater, Вы писали:

P>Кто и зачем этот тред создаёт?

P>Как с этим бороться (или как этим процессом управлять)?
P>Как прибить этот тред, когда мне интерфейс с "мои документы" уже не нужен (например, при уничтожении дерева)?

Видимо этот поток создает система, а зачем и что он делает . Но если он тебе не мешает и сам завершается, зачем тебе им управлять? Или возникают какие-то проблемы?
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[2]: Контрол Дерево файловой системы.
От: Dagdbog  
Дата: 28.10.04 12:11
Оценка:
Здравствуйте, programmater, Вы писали:

P>К предыдущему сообщению:

P>не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а
P>CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...


А вообще есть сорсы Winnt4 и Win2000 ! Там есть и IE и Проводник ! Посмотри как там .. хотя там если честно — жопа, объем кода колоссальный ! Если разбрешься — расскажи !
Re[3]: Контрол Дерево файловой системы.
От: kliff Россия http://www.esignal.ru
Дата: 28.10.04 12:52
Оценка:
Здравствуйте, Dagdbog, Вы писали:

D>Здравствуйте, programmater, Вы писали:


P>>К предыдущему сообщению:

P>>не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а
P>>CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...


D>А вообще есть сорсы Winnt4 и Win2000 ! Там есть и IE и Проводник ! Посмотри как там .. хотя там если честно — жопа, объем кода колоссальный ! Если разбрешься — расскажи !


А хоть у кого-нить есть эти сорцы? Слухов много но поиск ничего не дал.
Re[4]: Контрол Дерево файловой системы.
От: Dagdbog  
Дата: 28.10.04 14:16
Оценка:
Здравствуйте, kliff, Вы писали:

K>Здравствуйте, Dagdbog, Вы писали:


D>>Здравствуйте, programmater, Вы писали:


P>>>К предыдущему сообщению:

P>>>не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а
P>>>CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...


D>>А вообще есть сорсы Winnt4 и Win2000 ! Там есть и IE и Проводник ! Посмотри как там .. хотя там если честно — жопа, объем кода колоссальный ! Если разбрешься — расскажи !


K>А хоть у кого-нить есть эти сорцы? Слухов много но поиск ничего не дал.


есть ! поищи в сети e-donkey ! хоть они и древние но в них масса полезного !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.