100分求有关浏览路径对话框的问题

最帅马老师 2010-04-25 11:45:10
我现在用的方法是:

CString	XXX::GetFilePath(unsigned int nResourceId)
{
CString sFolderPath;
BROWSEINFO bi;
char Buffer[MAX_PATH];

bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer; // 如果这个参数为NULL则不能显示对话框
bi.lpszTitle = "浏览源文件目录";
bi.ulFlags = BIF_EDITBOX; // 包括文件
bi.lpfn = NULL;
bi.iImage = nResourceId;

LPITEMIDLIST pIDList = SHBrowseForFolder(&bi); // 调用显示选择对话框

if(pIDList){
SHGetPathFromIDList(pIDList, Buffer); // 取得文件夹路径到Buffer里
sFolderPath = Buffer;

// 提交数据显示
int iLen = sFolderPath.GetLength();

if(iLen>0){
// 处理显示格式,路径字符串的最后一个字符必须为\
// 因此强制处理
//
if(iLen>3){
sFolderPath += "\\";
}

return sFolderPath;
}// fi sFolderPath.GetLength
}// fi

// 清理工作
LPMALLOC lpMalloc;
if(!FAILED(SHGetMalloc(&lpMalloc))){
lpMalloc->Free(pIDList);
lpMalloc->Release();
}// fi

return "";
}


但这个方法弹出的对话框没有新建按钮,不知新键按钮这样的浏览路径对话框如何做?

如下图所示:



并且能指定初始目录,即当对话框打开时能默认定位到一个文件夹,请教高手,如何做,有例子最好了
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzy694358 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
bi.ulFlags = BIF_EDITBOX;
====================
这个位置改成
bi.ulFlags = BIF_USENEWUI;
就有新建功能了

bi.lpfn = NULL;
==================
这个位置传一个函数指针,要全局或静态函数
然后bi有一个lParam参数
传入默认路径的字符串指针
回调函数的函数体参考一下代码……
[/Quote]
up
cdsnpeter 2010-04-27
  • 打赏
  • 举报
回复
SHBrowseForFolder可以用来得到一个用户选择的目录。

指定一个初始目录,在BROWSEINFO结构体中提供了一个成员,这是一个指向函数的指针,通过这个回调函数,可以处理初始化的时候需要做的一些事情。

具体写法如下:

  static TCHAR g_szLastSelDir[MAX_PATH]   ;  

int CALLBACK BrowseCallbackProc(HWND hwnd, UINT msg, LPARAM lp, LPARAM pData)
{
if (msg == BFFM_INITIALIZED )
{
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)g_szLastSelDir);
}
return 0;
}

BOOL BrowseDirectory(HWND hwnd, LPSTR lpszDir, DWORD dwLen)
{
lstrcpyn(g_szLastSelDir, lpszDir, sizeof(g_szLastSelDir)) ;

BROWSEINFO bi;
bi.hwndOwner=hwnd;
bi.pidlRoot=0;
bi.pszDisplayName=0;
bi.lpszTitle="Browse Directory";
bi.lpfn=BrowseCallbackProc;
bi.lParam=0;
bi.ulFlags= BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;

LPITEMIDLIST pidl ;
if (pidl = SHBrowseForFolder(&bi))
{
SHGetPathFromIDList(pidl, lpszDir);

_tcscpy(g_szLastSelDir, lpszDir);
return TRUE ;
}
return FALSE ;
}
liyelun 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
bi.ulFlags = BIF_EDITBOX;
====================
这个位置改成
bi.ulFlags = BIF_USENEWUI;
就有新建功能了

bi.lpfn = NULL;
==================
这个位置传一个函数指针,要全局或静态函数
然后bi有一个lParam参数
传入默认路径的字符串指针
回调函数的函数体参考一下代码……
[/Quote]
厉害!
向立天 2010-04-26
  • 打赏
  • 举报
回复
bi.ulFlags = BIF_EDITBOX;
====================
这个位置改成
bi.ulFlags = BIF_USENEWUI;
就有新建功能了

bi.lpfn = NULL;
==================
这个位置传一个函数指针,要全局或静态函数
然后bi有一个lParam参数
传入默认路径的字符串指针
回调函数的函数体参考一下代码
int CALLBACK BrowseForFolderProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg == BFFM_INITIALIZED)
{
::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);
}

return 1;
}
Eleven 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
bi.ulFlags = BIF_EDITBOX;
====================
这个位置改成
bi.ulFlags = BIF_USENEWUI;
就有新建功能了

bi.lpfn = NULL;
==================
这个位置传一个函数指针,要全局或静态函数
然后bi有一个lParam参数
传入默认路径的字符串指针
回调函数的函数体参考一下代码……
[/Quote]
Up...
liumenghappy 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]

bi.ulFlags = BIF_EDITBOX;
====================
这个位置改成
bi.ulFlags = BIF_USENEWUI;
就有新建功能了

bi.lpfn = NULL;
==================
这个位置传一个函数指针,要全局或静态函数
然后bi有一个lParam参数
传入默认路径的字符串指针
回调函数的函数体参考……
[/Quote]
学习
wuhuwy 2010-04-26
  • 打赏
  • 举报
回复
自己做一个对话框,在对画框里获取路径并显示出来,然后响应新建文件夹的消息
最帅马老师 2010-04-25
  • 打赏
  • 举报
回复
我的意思是出现像图中那样的对话框,我现在做的没有“新建文件夹”这个按钮
jbz001 2010-04-25
  • 打赏
  • 举报
回复
你想新建什么?
不是有个新建文件夹么?

15,978

社区成员

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

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