【问题标题】:How to use IFileDialog with FOS_PICKFOLDER while still displaying file names in the dialog如何将 IFileDialog 与 FOS_PICKFOLDER 一起使用,同时仍在对话框中显示文件名
【发布时间】:2011-11-25 13:15:58
【问题描述】:

我正在尝试使用 IFileDialog 来选择一个文件夹,下面的代码就可以了。问题是我想在浏览时查看某些文件类型和文件夹(例如 *.txt)。有没有简单的方法来做到这一点?

//g_path is a global which will contain the selected folders path
void PickContainer()
{
    IFileDialog *pfd;
    if (SUCCEEDED(CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd))))
    {
        DWORD dwOptions;
        if (SUCCEEDED(pfd->GetOptions(&dwOptions)))
        {
            pfd->SetOptions(dwOptions | FOS_PICKFOLDERS);
        }
        if (SUCCEEDED(pfd->Show(NULL)))
        {
            IShellItem *psi;
            if (SUCCEEDED(pfd->GetResult(&psi)))
            {
                if(!SUCCEEDED(psi->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &g_path)))
                {
                    MessageBox(NULL, "GetIDListName() failed", NULL, NULL);
                }
                psi->Release();
            }
        }
        pfd->Release();
    }
}

【问题讨论】:

  • 请注意,如果您使用上面的代码,当您完成g_path 中包含的路径后,应该使用CoTaskMemFree() 释放它。详情请见IShellItem::GetDisplayName()
  • 非常感谢您的sn-p!虽然这不是我的问题,但 sn-p 对我来说也完美无缺。

标签: winapi


【解决方案1】:

选择FOS_PICKFOLDERS 后,您将无法在对话框中看到文件,只能看到文件夹。如果省略FOS_PICKFOLDERS,则无法选择文件夹,只能选择文件。标准对话框不支持您的要求。您可以编写自己的对话框,但我倾向于找到一种方法来组织您的应用程序以适应标准对话框的行为。

【讨论】:

  • 这并不是为了更好地组织应用程序。标准对话框仍然不是最适合用户的(尽管它比 Vista 之前的选项好很多)——当我四处浏览时,我发现我的所有文件夹都是空的,这让我感到困惑,即使我的最终目标恰好是文件夹而不是文件。
  • 就我而言,我有兴趣将文件和文件夹的集合添加到文件存档中。无法从一个标准对话框中同时选择两者是很烦人的。围绕“您可以添加文件或文件夹,但不能同时添加”重新组织应用程序是没有意义的。我收集自定义对话框是唯一的选择。
  • 我完全不喜欢时尚,这不是“更好地组织应用程序”,有些用例只要求用户能够同时选择文件和文件夹,这真的很痛苦没有微软对话框支持这个:(
  • @Erk SHBrowseForFolder 支持在选择文件夹的同时显示文件;通过使用BIF_BROWSEINCLUDEFILES。遗憾的是,IFileDialog 不支持它旨在取代的 API 中的功能。
【解决方案2】:

遗憾的是,现在不可能,而且微软似乎忽略了对该功能的请求:http://social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/4a330e26-4d52-4fce-8a89-5c56fa132688

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2012-01-07
    相关资源
    最近更新 更多