| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > как задать выбранную папку в диалоге выбора папки? |
| Автор: zkv 3.9.2006, 21:37 |
| собственно сам диалог обзора вызывается без проблем, а вот как сделать, чтобы при старте диалога уже была бы выбрана определенная папка. если через BROWSEINFO::pidlRoot передать стартовую папку, то в диалоге отображаются, только ее содержимое, а надо задать именно папку, которая выбрана при старте диалога (т.е. чтобы все каталоги имеющиеся на компе в диалоге присутствовали). и вообще есть ли в MFC какая нибудь альтернатива SHBrowseForFolder() ? Что то неприятно с ним работать |
| Автор: zkv 4.9.2006, 00:26 |
| и еще, на форуме несколько раз задавали вопрос об использовании CFileDialog для открытия каталога, но ответа так и не последовало (я не нашел во всяком случае), так можно использовать или нет? |
| Автор: zkv 4.9.2006, 03:05 | ||
Damarus спасибо за столь развернутый пример, только у меня почему то работает только в таком варианте (мне сгодится и так, привожу для сведения):
как все непросто оказывается, неужели в MFC нет ничего проще, не верится, что для открытия файла сделали класс (CFileDialog), а для папки ничего нет. Повторюсь, кто-нибудь знает наверняка, что использовать CFileDialog для открытия каталога не получится? |
| Автор: Earnest 4.9.2006, 07:20 |
| Теоретически можно, но требуются доработки: нужно запретить заходить в листовые папки, обработать выбор папки как выбор, а не как вход в нее и т.д. И все равно получается костыль. Когда-то очень давно именно так и делала. Но потом стала использовать SHBrowse: стандартное средство все-таки. Пользоваться напрямую, конечно, неудобно, но кто мешает обернуть это дело в класс или в функцию? |
| Автор: Damarus 4.9.2006, 09:55 | ||
zkv, то есть код, который я привёл (без изменений), у тебя не работает |
| Автор: zkv 4.9.2006, 12:46 | ||||
Damarus, выражается в том, что нужная папка просто не выбирается, диалог появляется нормально, в коде
перед SendMessage смотрел на значение lpData, туда все правильно доходит, а как дальше проследить не знаю пробовал менять bi.ulFlags, не помогло, добавлял/прибавлял '\\' в конец пути, тоже глухо, получилось только так, как показано в моем вариатнте выше, причем мой вариант работает нормально только при сброшеном флаге BIF_NEWDIALOGSTYLE, но меня это устраивает, "ненормальность" работы заключается в том, что если указать к примеру "c:\\" или любой другой диск то он выбирается, а если добавить к пути какую нибудь папку к примеру "c:\\Program Files\\" (пробовал как со слешем на конце, так и без него), то опять таки не выбирается ничего. Работаю в 2003 студии. Всем спасибо за помощь |