VC中目录选择对话框的使用
来源:互联网 发布:revit软件下载 编辑:程序博客网 时间:2024/05/09 06:15
一、数据结构
VC中目录选择对话框使用如下函数打开:
PIDLIST_ABSOLUTE SHBrowseForFolder( LPBROWSEINFO lpbi );
其中,LPBROWSEINFO是一个结构:
typedef struct _browseinfo {
HWND hwndOwner;
PCIDLIST_ABSOLUTE pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
该结构参数的具体含义见MSDN。
二、使用方法:
BROWSEINFO bi;
WCHAR szPathName[MAX_PATH];
//初始化参数
SecureZeroMemory(&bi, sizeof(BROWSEINFO)); //清0
//bi.pidlRoot = ParsePidlFromPath("C://"); //设置选择的根目录,如“C://”则只能选C盘的目录
bi.hwndOwner = GetSafeHwnd(); //父窗口句柄
bi.pszDisplayName = szPathName; //保存路径的buffer
bi.lpszTitle = L"浏览文件夹"; //标题
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_VALIDATE; //对话框显示模式
//调用显示选择对话框
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if(pidl)
{
SHGetPathFromIDList(pidl, szPathName); //获取全路径
GetDlgItem(IDC_EDIT_INFO)->SetWindowText(szPathName);
//检查选择是否有错
CString szErrMsg;
if(_wchdir(szPathName)) //changing the current working directory.
{
switch(errno)
{
case ENOENT:
szErrMsg = "Unable to locate the directory: ";
szErrMsg += szPathName;
break;
case EINVAL:
szErrMsg = "Invalid buffer.";
break;
default:
szErrMsg = "Unknown error.";
}
}
MessageBox(szErrMsg, L"Error", MB_ICONERROR | MB_OK);
//释放内存
LPMALLOC pMalloc;
if(SUCCEEDED(SHGetMalloc(&pMalloc)))
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
三、限定目录
也就是限制用户只能从哪个目录下选择目录(子目录)。将二中如下语句注释去掉:
//bi.pidlRoot = ParsePidlFromPath("C://"); //设置选择的根目录,如“C://”则只能选C盘的目录
增加如下函数:
//文件目录转成LPITEMIDLIST
LPITEMIDLIST CTestToolsDlg::ParsePidlFromPath(LPCSTR lpszPath)
{
OLECHAR olePath[MAX_PATH];
LPSHELLFOLDER pDesktopFolder;
LPITEMIDLIST pidl;
ULONG ulEaten, ulAttribs;
HRESULT hres;
SHGetDesktopFolder(&pDesktopFolder);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszPath, -1, olePath, sizeof(olePath));
hres = pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &ulEaten, &pidl, &ulAttribs);
hres = pDesktopFolder->Release();
if(FAILED(hres))
return NULL;
return pidl;
}
之所以使用该函数是因为BROWSEINFO结构的pidlRoot参数只支持LPITEMIDLIST,不支持字符串。
参考文献:
http://blogger.org.cn/blog/more.asp?name=joinclear&id=15268
http://www.anqn.com/dev/vc-c++/a/2005-08-31/a52730.shtml
- VC中目录选择对话框的使用
- VC中选择目录对话框
- VC中选择目录对话框
- 使用vc打开目录选择对话框
- VC++选择目录对话框
- VC实现在浏览目录对话框中选择目录
- VC++中的目录选择对话框
- VC 文件对话框 目录选择
- VC++中打开保存目录选择对话框操作
- VC中选择文件目录和打开文件对话框
- VC文件目录选择对话框(任意目录)
- VC文件目录选择对话框(任意目录)
- VC++实现文件选择对话框 及目录
- 在VC中如何使用对话框让用户选择自己保存文件的路径
- 在VC中如何使用对话框让用户选择自己保存文件的路径
- 在VC中做一个选择文件夹的对话框
- 在VC中做一个选择文件夹的对话框
- 在VC中做一个选择文件夹的对话框 (转载)
- c++中头文件
- 我在CSDN的第一篇博文
- 多用户博客BLOG系统大全
- html:javascript标签
- 程序员常用的Total Command插件
- VC中目录选择对话框的使用
- 开始写分析C语言的DLL
- 重烧内核之后初始化失败
- c++中的explicit关键字
- JSP环境配置
- Windows mobile下如何程序控制CAB的安装
- Acegi自动登录
- 如何设置Tomcat目录浏览
- 分解子串函数strtok的一些感受