您的位置:首页 > 其它

如何打开磁盘目录对话框(BrowseForFolder)

2016-05-04 10:52 330 查看
打开文件对话框相信很多人都已经懂了,那么如何通过打开对话框选择路径呢?这里就要介绍几个函数和结构体.

//文件夹信息结构
typedef struct _browseinfo {
HWND hwndOwner;         //弹出目录对话框的父窗口
LPCITEMIDLIST pidlRoot;//ITEMIDLIST结构的地址,包含浏览时的初始根目录
//如果设为NULL则桌面目录将被使用
LPTSTR pszDisplayName;//用来保存用户选中的目录字符串的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。
LPCTSTR lpszTitle;//该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。
UINT ulFlags;    //一般设0足以
BFFCALLBACK lpfn;//应用程序定义的浏览对话框 回调函数的地址。当对话框中的事件发生时,该对话框将调用 回调函数。该参数可用为NULL。
LPARAM lParam;//对话框传递给 回调函数的一个参数 指针
int iImage;与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;


//存放路径信息结构体
typedef struct _ITEMIDLIST {
SHITEMID mkid;
} ITEMIDLIST, *LPITEMIDLIST;
typedef const ITEMIDLIST* LPCITEMIDLIST;


//显示对话框选择路径
LPITEMIDLIST WINAPI SHBrowseForFolder(
LPBROWSEINFO lpbi //指向文件夹信息结构的指针
);


//获取ITEMIDLIST结构指针中的路径信息
WINSHELLAPI   BOOL   WINAPI   SHGetPathFromIDList(
LPCITEMIDLIST   pidl,
LPSTR   pszPath
);


代码如下:

TCHAR szBrowsePath[MAX_PATH];
ZeroMemory(szBrowsePath, sizeof(szBrowsePath));

BROWSEINFO bi = { 0 };  //因为已经初始化为0.所以有些项不用再重复赋值了
bi.hwndOwner = m_hWnd;
bi.pszDisplayName = szBrowsePath;
bi.lpszTitle = TEXT("请选择搜索路径:");

LPITEMIDLIST lpiml = { 0 };
lpiml = SHBrowseForFolder(&bi); //如果没有选中目录,则返回NULL
if (lpiml && SHGetPathFromIDList(lpiml,szBrowsePath))//从lpiml 中获取路径信息
{
m_path = szBrowsePath;
UpdateData(FALSE);
}
else
{
AfxMessageBox(TEXT("请选择一个路径,或者手动输入!"));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: