关于文件夹选择对话框的实现

kelvinty 2010-05-12 05:47:13
如何实现类似打开文件对话框这种风格的文件夹选择对话框?
...全文
85 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuharris 2010-05-13
  • 打赏
  • 举报
回复
CEfileSet
kelvinty 2010-05-12
  • 打赏
  • 举报
回复
再补充一句,在那种对话框里面可以看到各个文件的信息,但是最后的结果却是选择的文件夹
kelvinty 2010-05-12
  • 打赏
  • 举报
回复
这个貌似不是我要的那种,这种方式我已经实现了,但是老总要类似文件选择的那种大的对话框。

感谢你们。
wltg2001 2010-05-12
  • 打赏
  • 举报
回复
上面的回复太快了。
jamseyang 2010-05-12
  • 打赏
  • 举报
回复
ls先我一步,没看见!
wltg2001 2010-05-12
  • 打赏
  • 举报
回复
用SHBrowseForFolder
这个是网上的一个例子:
CString iDir;
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = m_Dir.GetBuffer(512);
bi.lpszTitle = _T("选择保存的文件夹");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST* pidl = ::SHBrowseForFolder(&bi); //显示文件夹对话框

if (::SHGetPathFromIDList(pidl, m_Dir.GetBuffer(512))) //因为SHBrowseForFolder得到解决的是一个ITEMIDLIST,所以要用SHGetPathFromIDList将它转成路径的形式。

liruda 2010-05-12
  • 打赏
  • 举报
回复

CString pathname;

CFileDialog f_browser(true,NULL,NULL);
if (f_browser.DoModal()==IDOK)
{
pathname=f_browser.GetPathName();
m_PathName=pathname;
}
m_FilePath.SetWindowTextW(pathname);
Eleven 2010-05-12
  • 打赏
  • 举报
回复

LPMALLOC pMalloc = NULL;
CString thePathName(_T(""));
if(::SHGetMalloc(&pMalloc) == NOERROR)
{
BROWSEINFO bi;
TCHAR pszBuffer[MAX_PATH] = {0};
LPITEMIDLIST pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = pszBuffer;
bi.lpszTitle = _T("Select Directory");
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
if((pidl = ::SHBrowseForFolder(&bi)) != NULL)
{
if(::SHGetPathFromIDList(pidl, pszBuffer))
thePathName = pszBuffer;
else
return;
pMalloc->Free(pidl);
}
pMalloc->Release();
}
jamseyang 2010-05-12
  • 打赏
  • 举报
回复

void CBrowseDlg::OnGetbrowse()
{
// TODO: Add your control notification handler code here
CString ReturnPach;
TCHAR szPath[_MAX_PATH]; //保存路径变量
BROWSEINFO bi; // BROWSEINFO结构变量
bi.hwndOwner = NULL; //HWND句柄
bi.pidlRoot = NULL; //默认值为NULL
bi.lpszTitle = _T("文件浏览对话框"); //对话框标题
bi.pszDisplayName = szPath; //选择文件夹路径
bi.ulFlags = BIF_RETURNONLYFSDIRS; //标记
bi.lpfn = NULL; //默认值为NULL
bi.lParam = NULL; //回调消息
LPITEMIDLIST pItemIDList = SHBrowseForFolder(&bi); //显示文件浏览对话框
if(pItemIDList)
{
if(SHGetPathFromIDList(pItemIDList,szPath)) //判断是否获得文件夹路径
ReturnPach = szPath;
}
else
{
ReturnPach = ""; //文件夹路径为空
}
m_Path.SetWindowText(ReturnPach);

}
ljz888666555 2010-05-12
  • 打赏
  • 举报
回复

UpdateData(TRUE);

char szDir[MAX_PATH];

BROWSEINFO bi;

ITEMIDLIST *pidl;

bi.hwndOwner = this->m_hWnd;

bi.pidlRoot = NULL;

bi.pszDisplayName = szDir;

bi.lpszTitle = "请选择目录";

bi.ulFlags = BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;

bi.lpfn = NULL;

bi.lParam = 0;

bi.iImage = 0;

pidl = SHBrowseForFolder(&bi);

if(pidl == NULL) return;

if(!SHGetPathFromIDList(pidl, szDir)) return;

else m_strPath = szDir;

UpdateData(FALSE);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧