c++ - 如何将 FileDialog 限制到特定路径

标签 c++ winapi openfiledialog savefiledialog

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

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

我想将“Some path”作为对话框中的根路径,并将导航限制在该文件夹及其子文件夹中。我可以为此使用 lpfnHook 吗?

最佳答案

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

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

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

参见 this MSDN article有关 Hook 过程的更多详细信息。 This question还讨论了在打开的对话框中更改目录。

关于c++ - 如何将 FileDialog 限制到特定路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10520570/

相关文章:

c++ - 如何使用 errorno 和 _get_errno?

c# - 打开文件对话框只有名称

c++ - 我的方法调用是如何解决的?

c++ - 如何通过指针简化重载下标运算符的使用?

c++ - 这段代码中如何发生内存泄漏

winapi - 为什么这个函数有 Unicode 和 ANSI 两种版本?

c++ - Winapi检测按钮悬停

c# - 使用 openfiledialog 移动多个文件

c# - WPF 文本框和浏览文件 - 是否有更优雅的解决方案?

C 应用程序之上的 C++ UI 表单