正文

如何使用“浏览文件夹”选择对话框? 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);

 

阅读(5771) | 评论(0)


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

评论

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