更新时间:2015-12-19 23:16:42浏览次数:1+次
BROWSEINFO的结构如下:
typedef struct _browseinfo {
HWND hwndOwner; // 父窗口句柄
LPCITEMIDLIST pidlRoot; // 要显示的文件夹的根(Root)
LPTSTR pszDisplayName; // 保存被选取的文件夹路径的缓冲区
LPCTSTR lpszTitle; // 显示位于对话框左上部的标题
UINT ulFlags; // 指定对话框的外观和功能的标志
BFFCALLBACK lpfn; // 处理事件的回调函数
LPARAM lParam; // 应用程序传给回调函数的参数
int iImage; // 保存被选取的文件夹的图片索引
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO
成员变量上代码:
void CTestDlg::OnBtnTest()
{
// TODO: Add your control notification handler code here TCHAR pszPath[MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = TEXT("请选择文件夹");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl == NULL)
{
return;
}
if (SHGetPathFromIDList(pidl, pszPath))
{
AfxMessageBox(pszPath);
}
}
这一般均能够满足要求,但有时还是需要在此基础上增强一些功能。具体源代码:
void C文件夹对话框Dlg::OnBnClickedBtnFolder()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szPath[1000];
CString str;
ZeroMemory(szPath,sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner=this->GetSafeHwnd();
bi.pidlRoot=NULL;
bi.pszDisplayName=szPath;
bi.lpszTitle=L"请选择文件夹:";
bi.ulFlags=BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn=BrowseCallBackProc;
bi.lParam=(LPARAM)_TEXT("桌面:\\");
bi.iImage=0;
LPITEMIDLIST lp=SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, szPath))
{
str.Format(L"选择的目录为 %s", szPath);
//AfxMessageBox(str);
}
else
{
AfxMessageBox(L"无效的目录,请重新选择");
return ;
}
}
int CALLBACK BrowseCallBackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch(uMsg)
{
case BFFM_INITIALIZED: //选择文件夹对话框初始化
//设置默认路径为lpData即'D:\'
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
//在STATUSTEXT区域显示当前路径
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, lpData);
//设置选择文件夹对话框的标题
::SetWindowText(hwnd, TEXT("选择文件夹对话框"));
break;
case BFFM_SELCHANGED: //选择文件夹变更时
{
TCHAR pszPath[MAX_PATH];
//获取当前选择路径
SHGetPathFromIDList((LPCITEMIDLIST)lParam, pszPath);
//在STATUSTEXT区域显示当前路径
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)pszPath);
}
break;
}
return 0;
}
代码实现:
相关资讯