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

Gri*_*izz 13 winapi

我正在尝试使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 8

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

  • 这不是关于更好地组织应用程序.这是标准的对话框仍然不是最好的用户(虽然它比Vista之前的选项好很多) - 我发现在我浏览时看起来我的所有文件夹都是空的,这让我很困惑,即使我的最终目标恰好是文件夹而不是文件. (5认同)
  • @Erk **[SHBrowseForFolder](https://learn.microsoft.com/en-us/windows/desktop/api/shlobj_core/nf-shlobj_core-shbrowseforfoldera)** 支持选择文件夹时显示文件;通过使用 [**BIF_BROWSEINCLUDEFILES**](https://learn.microsoft.com/en-us/windows/desktop/api/shlobj_core/ns-shlobj_core-_browseinfoa)。遗憾的是 **IFileDialog** 不支持它旨在取代的 API 的功能。 (4认同)
  • 就我而言,我有兴趣将文件和文件夹的集合添加到文件存档中.无法从单个标准对话框中选择两者都很烦人.重新组织应用程序"你可以添加文件或文件夹,但不是两者都没有"是没有意义的.我收集自定义对话框是唯一的选择. (2认同)
  • 我对fadden完全感到自由,不是要“更好地组织一个应用程序”,而是有些用例仅要求用户能够选择文件和文件夹,而没有Microsoft对话框支持这一点确实让人很痛苦。 :( (2认同)

Owe*_*wen 5

令人遗憾的是现在无法实现,并且Microsoft似乎正在忽略对该功能的请求:http : //social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/4a330e26-4d52-4fce-8a89-5c56fa132688