【问题标题】:Allowing IFileOpenDialog to pick a folder that doesn't exist yet允许 IFileOpenDialog 选择一个尚不存在的文件夹
【发布时间】:2012-01-10 07:13:19
【问题描述】:

我正在尝试创建一个对话框来选择一个新文件夹来保存文件。 IFileOpenDialog 类效果很好,只是它不允许选择新文件夹。

即对话框底部的“文件夹:C:\existings\new-folder”弹出如下信息:

新建文件夹
路径不存在。
检查路径并重试。

这是我得到的代码:

IFileDialog* fileDialog
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, 
    IID_PPV_ARGS(&fileDialog));

DWORD options;
fileDialog->GetOptions(&options);

options &= ~FOS_FILEMUSTEXIST;  
options &= ~FOS_PATHMUSTEXIST;
fileDialog->SetOptions(options | FOS_PICKFOLDERS);

fileDialog->Show(parentWindow);

任何指针或黑客将不胜感激!谢谢!


引用这个other question的迈克尔:

[为了阻止一些 cmets,SHBrowseForFolder API 仍然存在,但仍然不是我们的 UI 决策者可接受的解决方案。]

这里也一样……

【问题讨论】:

  • 这引出了一个问题,为什么您使用打开的对话框来选择保存内容的位置...
  • Deanna,我正在尝试用本机版本替换 Java 选择文件对话框,因此它必须与原始行为匹配(不幸的是,这意味着文件夹选择对话框已退出)。使用 Java 对话框,您可以浏览到一个文件夹并输入要创建的新文件夹的名称(想象一个存档应用程序,您希望在其中选择一个新文件夹以保存一堆文件)。如果使用 FOS_PICKFOLDERS,尝试使用 IFileOpenDialog 执行此操作会失败。
  • 他们不能直接点击原生的“创建文件夹”按钮并选择它吗?
  • 这是可能的,只是没那么好 ;-) 想象一下,如果每次你想保存一个文件,你必须点击“创建文件”然后选择它。
  • @Deanna 这就像一个另存为对话框。用户试图指定某物去哪里;不是某物的地方。

标签: c++ winapi folderbrowserdialog


【解决方案1】:

我认为您想使用 CLSID_FileSaveDialog 而不是 CLSID_FileOpenDialog。除了基类 IFileDialog 之外,还可能使用IFileSaveDialog

【讨论】:

【解决方案2】:

当您选择一个文件夹时,您可以使用文件夹选择器对话框。 这带有正确的标志,底部有一个“创建”按钮和一个允许您指定不存在路径的文本条目。

【讨论】:

  • MSDN 上,听起来 SHBrowseForFolder 不鼓励用于新应用:For Windows Vista or later, it is recommended that you use IFileDialog with the FOS_PICKFOLDERS option rather than the SHBrowseForFolder function. This uses the Open Files dialog in pick folders mode and is the preferred implementation.
猜你喜欢
  • 2018-07-04
  • 2016-04-08
  • 2022-12-15
  • 2019-12-11
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
相关资源
最近更新 更多