用COM组件接口IFileDialog实现选择文件夹对话框功能

对于实现选择文件类似风格的对话框来选择文件夹,

一般用系统的普通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;
}

结束本文。

猜你喜欢

转载自blog.csdn.net/henysugar/article/details/107753799