AlbertB Ответов: 2

Используя shbrowseforfolder (...) может ли кто-нибудь сказать мне, как установить начальную папку, но разрешить доступ над ней?


Привет.

Я использую SHBrowseForFolder (...), чтобы позволить пользователю выбрать папку для сохранения данных. Я хочу установить его в исходное положение, зависящее от других аспектов приложения. Я могу сделать это успешно, вызвав pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, NULL, & amp;defaultPidl, NULL) с параметром defaultPidl, установленным в требуемое местоположение по умолчанию.

Похоже, что оттуда действие по умолчанию состоит в том, чтобы ограничить пользователей от навигации выше этой точки. Необходимость в этом абсолютно ясна, но я не хочу ограничивать их таким образом. Может ли кто-нибудь предложить способ, которым я могу снять это ограничение, но все же установить начальное местоположение на то, что я хочу?

Что я уже пробовал:

Обширный онлайн-просмотр и чтение! ;)

Philippe Mori

Как было предложено в решении 1, я рекомендую вам использовать диалог, основанный на диалоге OpenFile. И я предлагаю вам сделать свою собственную оболочку, чтобы вы могли выбрать в одном месте, если вы хотите использовать SHBrowseForFolder, IFileDialog или customized OpenFileDialog (WinForms).

2 Ответов

Рейтинг:
1

Richard MacCutchan

Правила для этой функции четко задокументированы на сайте Структура BROWSEINFO (Windows)[^Если вы не хотите этого ограничения, то вам нужно использовать другую функцию. В качестве одной из альтернатив вы можете использовать настроенный OpeFileDialog.

[редактировать]
Документация MSDN предполагает, что вы используете Интерфейс IFileDialog (Windows)[^].
[/редактировать]


Рейтинг:
0

Midi_Mick

Для этого необходимо указать функцию обратного вызова в lpfn член совета директоров BROWSEINFO структура. Сначала установите начальную папку на рабочий стол (или самый высокий уровень, который вы хотите разрешить). Как только диалог будет инициализирован, вы можете отправить BFFM_SETSELECTION сообщение в диалоговое окно с папкой, которую вы хотите выбрать в LPARAM. Видеть Указатель функции BFFCALLBACK (Windows)[^] для получения подробной информации о том, как все это сделать.