对于实现选择文件类似风格的对话框来选择文件夹,
一般用系统的普通API接口,例如GetOpenFileName加上钩子函数或者SHBrowseForFolder,只能弹出这种丑陋而难用的界面,例如:

我们的目标是这样的好用好看效果:

原理就不细说了,简单得不得了,上代码给大家直接抄袭使用:
CoInitialize(nullptr);
IFileDialog* pfd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pfd));
if (SUCCEEDED(hr)) {
tastring result;
pfd->SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM);
if (pfd->Show(NULL) == S_OK) {
IShellItem* pitem = NULL;
if (pfd->GetResult(&pitem) == S_OK && pitem)
{
LPWSTR resultptr = NULL;
if (pitem->GetDisplayName(SIGDN_FILESYSPATH, &resultptr) == S_OK && resultptr) {
到此,resultptr就是结果,需要得可以拿去用了
result = resultptr;
}
pitem->Release();
}
}
pfd->Release();
return result;
}
结束本文。

本文介绍了一种利用IFileDialog接口优雅地选择文件夹的方法,通过CoCreateInstance创建文件对话框实例,设置选项为仅选择文件夹,并展示了如何获取所选文件夹的完整路径。
8998

被折叠的 条评论
为什么被折叠?



