有时我们需要获得某个文件夹的路径,而不是文件的路径,这时需要用API函数SHBrowseForFolder来实 现。 函数原型为: LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi); 其中LPBROWSEINFO为BROWSEINFO结构的指针。 BROWSEINFO结构如下: typedef struct _browseinfo { HWND hwndOwner;LPCITEMIDLIST pidlRoot;LPSTR pszDisplayName;LPCSTR lpszTitle;UINT ulFlags;BFFCALLBACK lpfn;LPARAM lParam;int iImage; } BROWSEINFO; 调用例子如下:void CTestDlg::OnBtndlg() { CString sFolderPath;//用来存储路径 char szPath[MAX_PATH]={0};//用来得到,你选择的活页夹路径,相当于提供一个缓冲区 BROWSEINFO m_bi; //初始化入口参数bi开始BIF_RETURNONLYFSDIRS,只有用户选择的是文件夹时“确定”按钮才有效。 BIF_STATUSTEXT 创建一个状态窗口,你可以设置其文本m_bi.ulFlags=80;实现如图:在文件夹浏览对话框上加一个新建文件夹按钮。 m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; m_bi.hwndOwner = GetSafeHwnd(); //得到父窗口Handle值 m_bi.pidlRoot = NULL; m_bi.lpszTitle ="网上邻居"; //设置标题 m_bi.lpfn = NULL; //设置标志 m_bi.lParam = NULL; m_bi.pszDisplayName = szPath; //此参数如为NULL则不能显示对话框 //初始化入口参数bi结束 LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi ); //调用显示选择对话框 // 弹出文件夹浏览目录,并选取目录 if ( pidl ) { //取得文件夹路径到szPath里 if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0; sFolderPath=szPath; //将路径保存在一个CString对象里 IMalloc * pMalloc = NULL; if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口 { pMalloc->Free( pidl ); // 释放内存 pMalloc->Release(); // 释放接口 } }MessageBox(sFolderPath);

评论