正文

如何使用“浏览文件夹”选择对话框? 2006-10-22 14:47:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/12567/19614.html

分享到:

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

阅读(5819) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册