【问题标题】:How to restrict FileDialog to specific path如何将 FileDialog 限制为特定路径
【发布时间】:2012-05-18 05:35:15
【问题描述】:

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

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

我想在对话框中使用“某些路径”作为根路径,并限制导航到该文件夹​​,它只是子文件夹。我可以为此使用 lpfnHook 吗?

【问题讨论】:

    标签: c++ winapi openfiledialog savefiledialog


    【解决方案1】:

    查看OFN_NOCHANGEDIR 标志,尽管文档是这样说的:

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

    此标志对 GetOpenFileName 无效。

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

    【讨论】:

      【解决方案2】:

      如果您只针对 Vista+,可以使用 IFileDialogEvents::OnFolderChanging 方法完全阻止更改。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-12
        • 1970-01-01
        • 2015-06-05
        • 2010-09-14
        • 2019-10-18
        相关资源
        最近更新 更多