Люди, помогите человеку, знакомому с COM только теоретически воткнуть окно TreeView файловой системы (как левая панель Windows Explorer, а также в ACDSee и большинстве CD-писалок или внутренний контент диалога SHBrowseForFolder). Понимаю, что это можно сделать и без всяких-там COM-компонентов (затолкать к себе обычный TreeView и вручную построить дерево файловой системы, попутно выдёргивая иконки из Shell32.dll), но что-то мне подсказывает, что такой компонет существует в системе — уж больно одинаково ведут себя перечисленные программы.
С WebBrowser я запутался. Подскажите плиз, какой Instance надо Криейтить, какой интерфейс от него получать и т.д. Также понимаю, что, если учесть мою нелюбовь ко всяким MFC и VCL и патологическое стремление писать всё исключительно ни чистеньком WIn32 API, то задача становится и вовсе нереальной. Но уж больно хочется . Помогите разобраться.
Здравствуйте, programmater, Вы писали:
P>Люди, помогите человеку, знакомому с COM только теоретически воткнуть окно TreeView файловой системы (как левая панель Windows Explorer, а также в ACDSee и большинстве CD-писалок или внутренний контент диалога SHBrowseForFolder). Понимаю, что это можно сделать и без всяких-там COM-компонентов (затолкать к себе обычный TreeView и вручную построить дерево файловой системы, попутно выдёргивая иконки из Shell32.dll), но что-то мне подсказывает, что такой компонет существует в системе — уж больно одинаково ведут себя перечисленные программы.
algol, Спасибо.
Но это не совсем то, что я хотел. Это как раз и есть "затолкать к себе обычный TreeView и вручную построить дерево файловой системы", просто это уже сделал кто-то за меня. Меня интересует другое, а именно как выдернуть этот контрол из эксплорера. Вот Смотрите. Берём обычный WinAmp. Смотрим загруженные Dll после запуска (список не привожу — не суть важно). Потом в плейлисте нажимаем на кнопочку Add->AddDid, появляется ShBrowseForFolder диалог. И — опаньки — в списке загруженных Dll откуда ни возьмись SHOWDOCVW.Dll и MyDocs.dll. А ведь раньше не было! Т.е. этот диалог является "обёрткой" каког-то COM компонента. Вот этот компонент я и хочу вытащить из системы(не устраивает меня диалог, нужно непосредственно на форму поместить). Кто-нибудь знает, как это сделать?
Здравствуйте, programmater, Вы писали:
P> Но это не совсем то, что я хотел. Это как раз и есть "затолкать к себе обычный TreeView и вручную построить дерево файловой системы", просто это уже сделал кто-то за меня. Меня интересует другое, а именно как выдернуть этот контрол из эксплорера. P> Т.е. этот диалог является "обёрткой" каког-то COM компонента. Вот этот компонент я и хочу вытащить из системы(не устраивает меня диалог, нужно непосредственно на форму поместить). Кто-нибудь знает, как это сделать?
Нет такого компонента, поэтому все строят дерево сами. В BrowseForFolder и Эксплорере Spy++ показывает обычный SysTreeView32.
Здравствуйте, algol, Вы писали:
A>Нет такого компонента, поэтому все строят дерево сами. В BrowseForFolder и Эксплорере Spy++ показывает обычный SysTreeView32.
Спасибо всем ответившим.
Убедили, нет в системе такого контрола, все пишут свои. А жаль .
"Копай в сторону IShellBrowser" — ага, я тоже так подумал. Первое, что я сделал, это
CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...)
Каково же было моё разочарование, когда мне вернулось E_NOINTERFACE. А дело в том, что IShellBrowser — это интерфейс обратного вызова, который реализовать должен я, и ни одна собака в системе его не имплементит .
Ладно, используя любезно предоставленные ссылки на примеры, слепил свой контрол (ну не люблю MFC, и всё — сделал на чистом API). И тут такой эффект: когда энумератор (IShellFolder::EnumObjects(...,&IEnmumIdl)) "добирается" (вызовами IEnmumIdl->Next) до папки "мои документы", то, помимо загрузки MYDOCS.dll и SHDOCVW.dll какая-то зараза создаёт неизвестный мне тред, который живёт в моём процессе своей жизнью и делает непонятно что. Когда я завершаю своё приложение, этот тред висит ещё несколько секунд, потом выходит. Вопросы:
Кто и зачем этот тред создаёт?
Как с этим бороться (или как этим процессом управлять)?
Как прибить этот тред, когда мне интерфейс с "мои документы" уже не нужен (например, при уничтожении дерева)?
К предыдущему сообщению:
не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а
CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...
Здравствуйте, programmater, Вы писали:
P>Кто и зачем этот тред создаёт? P>Как с этим бороться (или как этим процессом управлять)? P>Как прибить этот тред, когда мне интерфейс с "мои документы" уже не нужен (например, при уничтожении дерева)?
Видимо этот поток создает система, а зачем и что он делает . Но если он тебе не мешает и сам завершается, зачем тебе им управлять? Или возникают какие-то проблемы?
Здравствуйте, programmater, Вы писали:
P>К предыдущему сообщению: P>не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а P>CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...
А вообще есть сорсы Winnt4 и Win2000 ! Там есть и IE и Проводник ! Посмотри как там .. хотя там если честно — жопа, объем кода колоссальный ! Если разбрешься — расскажи !
Здравствуйте, Dagdbog, Вы писали:
D>Здравствуйте, programmater, Вы писали:
P>>К предыдущему сообщению: P>>не CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLFOLDER,...), а P>>CoCreateInstance(CLSID_WEBBROWSER,..ля-ля-ля,IID_ISHELLBROWSER,...), конечно же. Обшибся...
D>А вообще есть сорсы Winnt4 и Win2000 ! Там есть и IE и Проводник ! Посмотри как там .. хотя там если честно — жопа, объем кода колоссальный ! Если разбрешься — расскажи !
А хоть у кого-нить есть эти сорцы? Слухов много но поиск ничего не дал.
Здравствуйте, 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 ! хоть они и древние но в них масса полезного !