我正在尝试使用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)
一旦您选择,FOS_PICKFOLDERS那么您无法在对话框中看到文件,只能查看文件夹.如果省略FOS_PICKFOLDERS则不能选择文件夹,只能选择文件.标准对话框不支持您的要求.您可以编写自己的对话框,但我倾向于找到一种方法来组织应用程序以适应标准对话框的行为.
令人遗憾的是现在无法实现,并且Microsoft似乎正在忽略对该功能的请求:http : //social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/4a330e26-4d52-4fce-8a89-5c56fa132688