VC 打开目录对话框

From: http://blog.sina.com.cn/s/blog_790bb7190100yxm7.html

 对于文件选择对话框和目录选择对话框。在VC中打开文件选择对话框比较简单,使用CFileDialog就可以。打开目录选择对话框就稍微麻烦一些。需要使用API函数SHBrowseForFolder来实现。

 该函数原型为:
     LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFOlpbi); 
 其中LPBROWSEINFO为BROWSEINFO结构的指针。

BROWSEINFO结构如下:

typedef struct _browseinfo 
{
	HWND			hwndOwner;
	LPCITEMIDLIST	pidlRoot;
	LPSTR			pszDisplayName;
	LPCSTR			lpszTitle;
	UINT			ulFlags;
	BFFCALLBACK		lpfn;
	LPARAM			lParam;
	int				iImage;
}BROWSEINFO;

调用例子如下:

CString GetfolderPath()
{
	CString folderPath;
	BROWSEINFO bi;
	char buf[MAX_PATH];

	//初始化入口参数bi
	bi.hwndOwner = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = buf;	//此参数如为NULL则不能显示对话框
	bi.lpszTitle = "选择路径";
	bi.ulFlags = BIF_RETURNONLYFSDIRS;
	bi.lpfn = NULL;
	bi.iImage = 0;

	LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);	//调用显示选择对话框
	if(pIDList)
	{
		SHGetPathFromIDList(pIDList,buf);			//取得文件夹路径到buf里
		folderPath = buf;		//将路径保存在一个CString对象里
	}
	folderPath.Append("\\");

	return folderPath;
}

===========================================================
使用示例:
void CtzipUncompressDlg::OnBnClickedBtnUncompressto()
{
	CString folderPath;
	BROWSEINFO bi;
	char buf[MAX_PATH] = {0};

	//初始化入口参数bi
	bi.hwndOwner = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = buf;
	bi.lpszTitle = "解压缩到...";
	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE ;// new Folder button
	bi.lpfn = NULL;
	bi.iImage = 0;

	LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);			// 显示"浏览文件夹"对话框
	if(pIDList && SHGetPathFromIDList(pIDList, buf))		// 填充文件夹路径到buf
	{
		folderPath = buf;
		m_sDestDir = folderPath;
		UpdateData(FALSE);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值