如何将FileDialog限制为特定路径

时间:2012-05-09 16:52:05

标签: c++ winapi openfiledialog savefiledialog

是否可以将文件对话框(打开/保存)限制为特定文件夹是winapi?

OPENFILENAME fileDialogSettings;
...
fileDialogSettings.lpstrInitialDir = "Some path";
...
if(GetOpenFileName(&fileDialogSettings))
{
}

我希望在对话框中将“Some path”作为根路径,并限制导航到此文件夹,并且仅限于子文件夹。我可以使用lpfnHook吗?

2 个答案:

答案 0 :(得分:2)

如果您仅定位Vista +,则可以使用IFileDialogEvents::OnFolderChanging方法完全阻止更改。

对于旧版本的Windows,OpenFileDialog允许您指定一个钩子过程,您可以在其中获取CDN_FOLDERCHANGE通知。 虽然我看不到任何禁止更改的消息,但您可以发布消息告诉它“退回”,或者只是禁用“确定”按钮。

另一种选择是处理CDN_FILEOK通知并拒绝所需目录之外的路径。

有关挂钩过程的更多详细信息,请参阅this MSDN articleThis question还讨论了如何在打开的对话框中更改目录。

答案 1 :(得分:0)

查看OFN_NOCHANGEDIR标志,尽管文档说明了这一点:

  

如果用户,将当前目录还原为其原始值   在搜索文件时更改了目录。

     

此标志对GetOpenFileName无效。

编辑:再次阅读你的问题,我想你不希望用户从该目录向上导航,不确定这是否可以使用GetOpenFileName,你可能必须使用目录列表视图创建自己的对话框并限制他们那样。