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

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

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

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

结束本文。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值