选择文件夹对话框

选择文件夹对话框
       在一个项目中用到了选择文件夹对话框,为了方便特意写了函数来显示并返回用户选择的文件夹的路径;其中具体参数的含义可以参考http://tag.csdn.net/tag/browseinfo.xml
       调用时只需要:
if( FolderBrowseDialog( strUserSelectPath, TEXT(" 选择资源文件夹 "), 0, (LPCTSTR)strCurPath ) )
{
         // 用户选择了目录并单击确定
}
 
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)// 回调函数
{
    if (uMsg==BFFM_INITIALIZED)
    {
        // 设置初始目录
        if (lpData)
            SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)lpData);
    }
    return TRUE;
}
 
// 显示选择文件夹函数,当然首先需要确认文件夹存在,
// 如果用户选择了取消,返回为假,否则将返回真
BOOL FolderBrowseDialog(CString &folderSel,      // 用户选择的文件夹的路径
                        LPCTSTR title = 0,  // 选择框上方的提示
                        LPCTSTR root = 0,  // 设置初始的根路径
                        LPCTSTR curSel = 0) // 设置当前选择的目录
{
    ITEMIDLIST *ppidl = NULL;
 
    // 设置根目录
    if ( root != 0 )
    {
        OLECHAR szOleChar[MAX_PATH];  
        LPSHELLFOLDER IpsfDeskTop;    
        ULONG ulEaten, ulAttribs;  
        HRESULT hres;  
        SHGetDesktopFolder(&IpsfDeskTop);  
        wcscpy( szOleChar, (LPCTSTR)root );
        //MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,path,-1,szOleChar,sizeof(szOleChar));  
        hres = IpsfDeskTop->ParseDisplayName(NULL, NULL, szOleChar, &ulEaten, &ppidl, &ulAttribs);  
        hres=IpsfDeskTop->Release( );      
        if (FAILED(hres)) ppidl = NULL;
    }
 
    BROWSEINFO bi;
    TCHAR Buffer[MAX_PATH];
    // 初始化入口参数 bi 开始
    bi.hwndOwner = NULL;
    bi.pidlRoot = ppidl;
    bi.pszDisplayName = Buffer;// 此参数如为 NULL 则不能显示对话框
    bi.lpszTitle = title;
    bi.ulFlags = BIF_RETURNONLYFSDIRS;
    bi.lParam = (LPARAM)curSel;
    bi.lpfn = BrowseCallbackProc;
    bi.iImage = 0;
    // 初始化入口参数 bi 结束
    LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);// 调用显示选择对话框
    if (pIDList)
    {
        SHGetPathFromIDList(pIDList, Buffer);
        folderSel = Buffer;
        GlobalFree(pIDList);
        return TRUE;
    }
    return FALSE;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值