Как ограничить FileDialog определенным путем
Можно ли ограничить диалог файлов(открыть/сохранить) определенной папкой winapi?
OPENFILENAME fileDialogSettings;
...
fileDialogSettings.lpstrInitialDir = "Some path";
...
if(GetOpenFileName(&fileDialogSettings))
{
}
Я хочу иметь" некоторый путь " в качестве корневого пути в диалоговом окне и ограничить навигацию по этой папке, и это только подпапки. Могу ли я использовать lpfnHook для этого?
2 ответа:
Если вы ориентируетесь только на Vista+, вы можете использовать
IFileDialogEvents::OnFolderChanging
метод полного блокирования изменений.Для более старых версий Windows OpenFileDialog позволяет указать процедуру hook, в которой вы можете забрать
CDN_FOLDERCHANGE
уведомление. В то время как я не вижу никакого сообщения, чтобы запретить изменение, вы можете отправить сообщение, чтобы сказать ему, чтобы вернуться "назад", или просто отключить кнопку "ОК".Другой вариант-обрабатывать
CDN_FILEOK
уведомление и откажитесь от путей вне вашего требуемого каталога.Смотрите эту статью MSDN для получения более подробной информации о процедуре hook. этот вопрос также говорит об изменении каталога в открытом диалоге.
Посмотрите в
OFN_NOCHANGEDIR
флаг, хотя в документации сказано следующее:Восстанавливает текущий каталог в исходное значение, если пользователь изменил каталог при поиске файлов.
Этот флаг неэффективен для GetOpenFileName.
Edit: читая ваш вопрос еще раз, я думаю, что вы не хотите, чтобы пользователь переходил из этого каталога, не уверен, что это возможно с GetOpenFileName, возможно, вам придется создать свой собственный диалог с просмотр списка каталогов и ограничить их таким образом.