有时我们需要获得某个文件夹的路径,而不是文件的路径,这时需要用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);

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-07
  • 2021-09-15
  • 2021-08-11
相关资源
相似解决方案