您的位置:首页 > 其它

VC 打开目录对话框

2013-08-13 13:12 330 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: