前面已经讲过文件对话框,通过文件对话框的GetPathName()成员函数可以获取文件路径。我们还可以通过文件浏览对话框获取文件路径。要显示浏览对话框,需通过API函数SHBrowseFolder,其语法格式如下:
LPITEMIDLIST?SHBrowseForFolder(??????
????LPBROWSEINFO?lpbi
);
BROWSEINFO为结构体,其原型如下:
typedef struct _browseinfo?{
HWND?hwndOwner;
LPCITEMIDLIST?pidlRoot;
LPTSTR?pszDisplayName;
LPCTSTR?lpszTitle;
UINT?ulFlags;
BFFCALLBACK?lpfn;
LPARAM?lParam;
int?iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
示例:
1. 在前面文件对话框测试例程(FileDialogTest)的IDR_MAINFRAME菜单中新加SHBrowseFolderTest菜单,及子菜单Browse,如下:
?2. 为Browse子菜单添加事件处理程序,如下:
?3. 完成事件处理程序代码,如下:
void CFileDialogTestView::OnBrowse()
{
// TODO: 在此添加命令处理程序代码
CString strPath;
TCHAR szPath[_MAX_PATH];
BROWSEINFO mBI;
mBI.hwndOwner = NULL;
mBI.pidlRoot = NULL;
mBI.lpszTitle = _T("浏览对话框测试示例");
mBI.pszDisplayName = szPath;
mBI.ulFlags = BIF_RETURNONLYFSDIRS;
mBI.lpfn = NULL;
mBI.lParam = NULL;
LPITEMIDLIST pItemIdList = SHBrowseForFolder(&mBI);
if (pItemIdList)
{
if (SHGetPathFromIDList(pItemIdList, szPath))
{
strPath = "你选择的路径为: ";
strPath += szPath;
}
}
else
{
strPath = "你没有选择路径";
}
MessageBox(strPath);
}
4. 按Ctrl+F5试运行,结果如下:
?5.点击“SHBrowseFolderTest”菜单下的子菜单“Browse”
?打开浏览对话框,如下:
6. 点击“本地磁盘(E:)”?后,点击确定,结果如下:
我已将MFC通用对话框的测试源代码打包上传到CSDN,如需要离线查看,可去下载。
|