如何调用选择文件夹的对话框?

悲酥清风 2006-10-27 09:12:19
只知道选择文件的是CFileDialog,不知道选择文件夹的怎么调用?
...全文
205 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shore1000 2006-10-27
  • 打赏
  • 举报
回复
可以去CODEPROJECT下载一个叫CFolderDialog的基础类,将这个基础类放进你的工程中就可以用了,以下是下载地址和调用方式!~
http://www.codeproject.com/dialog/cfolderdialog.asp
m_strFolderPath = _T( "C;" );
CFolderDialog dlg( _T( "请选择你的图片文件所在的目录:" ), m_strFolderPath, this );
if( dlg.DoModal() == IDOK )
{
}

悲酥清风 2006-10-27
  • 打赏
  • 举报
回复
搜索了一下找到了,谢谢大家,都有分哦
rayland 2006-10-27
  • 打赏
  • 举报
回复
CFolderDialog dlg("初始路径");
if(IDOK==dlg.DoModal())
{
...
}
幽幽浮浮 2006-10-27
  • 打赏
  • 举报
回复
//打开某文件夹

BROWSEINFO bi;
char Buffer[MAX_PATH];
//LPARAM lpStartDir;

//初始化入口参数bi开始
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示对话框
bi.lpszTitle = "选择****路径";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = BrowseCallbackProc;//文件夹对话框回调函数

//初始化入口参数bi结束
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框
if(pIDList)
{
SHGetPathFromIDList(pIDList, Buffer);
//取得文件夹路径到Buffer里
m_strFolderPath = Buffer;//将路径保存在一个CString对象里
}

//释放内存
LPMALLOC lpMalloc;
if(FAILED(SHGetMalloc(&lpMalloc)))
{
return;
}
lpMalloc->Free(pIDList);
lpMalloc->Release();

LocalFree((PVOID)lpStartDir);*/


int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
TCHAR szDir[MAX_PATH];

switch(uMsg)
{
case BFFM_INITIALIZED:
if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir))
{
SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
}
break;

case BFFM_SELCHANGED:
// 根据路径,判断该路径下是否存在***文件,并设置按OK钮状态
if (SHGetPathFromIDList((LPITEMIDLIST)lParam ,szDir))
{
CString strPath = szDir;
if (SUCCEEDED(EnumFiles(strPath)))//EnumFiles()为查找某文 件函数
{
SendMessage(hwnd, BFFM_ENABLEOK, 1, 1);//
}
else
{
SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
}
}
break;
}
return 0;

}
Y___Y 2006-10-27
  • 打赏
  • 举报
回复
路径选择对话框
char path[MAX_PATH];
BROWSEINFO br;
ITEMIDLIST *item;
br.hwndOwner = this->GetSafeHwnd();
br.iImage = 0;
br.pszDisplayName = 0;
br.lParam = 0;
br.lpfn = 0;
br.lpszTitle = "请选择路径:";
br.pidlRoot = 0;
br.ulFlags = BIF_RETURNONLYFSDIRS;
item = SHBrowseForFolder(&br);
if (SHGetPathFromIDList(item,path)==TRUE)
{
MessageBox(path);
}
「已注销」 2006-10-27
  • 打赏
  • 举报
回复
来迟了,楼上正解
lsgt 2006-10-27
  • 打赏
  • 举报
回复
BROWSEINFO bi = {0};
char szDestFolder[MAX_PATH];
bi.hwndOwner = GetSafeHwnd();
bi.lpszTitle="请选择数据所在目录:";
bi.pszDisplayName=szDestFolder;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.ulFlags = (BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS | BIF_USENEWUI | BIF_VALIDATE);
LPITEMIDLIST pidlDest = SHBrowseForFolder(&bi);

char szPath[MAX_PATH];
if(pidlDest!=NULL && SHGetPathFromIDList(pidlDest,szPath))
{
//szPath即为所选择的目录
}

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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