问题 如何在FOS_PICKFOLDER中使用IFileDialog,同时仍在对话框中显示文件名


我正在尝试使用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();
    }
}

9983
2017-11-25 13:15


起源

请注意,如果您使用上面的代码,那么当您完成包含的路径时 g_path 它应该通过使用释放 CoTaskMemFree()。看到 的IShellItem :: GetDisplayName() 详情。 - dgnuff


答案:


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


8
2017-11-25 14:14



这不是关于更好地组织应用程序。这是标准的对话框仍然不是最好的用户(虽然它比Vista之前的选项好很多) - 我发现在我浏览时看起来我的所有文件夹都是空的,这让人感到困惑,即使我的最终目标恰好是文件夹而不是文件。 - Owen
就我而言,我有兴趣将文件和文件夹的集合添加到文件存档中。无法从单个标准对话框中选择两者都很烦人。重新组织应用程序“你可以添加文件或文件夹,但不是两者都没有”是没有意义的。我收集自定义对话框是唯一的选择。 - fadden
我完全不满fadden,它不是“组织一个更好的应用程序”,有些用例只需要用户能够选择文件和文件夹,真的很痛苦,没有Microsoft对话支持这个:( - Erik


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


3
2017-12-15 19:05