【MFC】BROWSEINFO 设置路径并显示,默认引导至源路径

本文介绍了一个用于设置文件夹路径的控件实现方法,包括如何通过对话框选择路径并将其显示在编辑框中,以及如何自定义回调函数来改变默认的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


void CTestDlg::SetFolderPath(UINT uid)
{
    BROWSEINFO   bi;   
    char   szPath[MAX_PATH];   
    LPITEMIDLIST   pList   =   NULL;   
    ZeroMemory(szPath,   MAX_PATH);  

    //获取当前路径
    GetDlgItemText(uid, szPath, MAX_PATH);
     // 配置路径对话框
    memset(&bi, 0, sizeof(BROWSEINFO));

    bi.hwndOwner   =  m_hWnd;
    bi.pidlRoot   =   pList;   
    bi.pszDisplayName   =   szPath;   

    bi.lpszTitle   =  "选择路径";   
    bi.ulFlags   =   BIF_EDITBOX;   
    bi.lpfn   =   BrowseCallbackProc;   
    bi.lParam   =   (LPARAM)szPath; 
    bi.iImage   =   0;

    //弹出选择目录对话框 
    if   ((pList   =   SHBrowseForFolder(&bi))   !=   NULL)   
    {    
        if (SHGetPathFromIDList(pList,   szPath))
        {
            SetDlgItemText(uid, szPath);
        }
        
    }
}

// 回调函数,系统默认的是如果该路径下有子路径,则默认展开子路径,但是其实大部分时间我们是不需要的

//这里根据某网友的例子修改的, 不展开路径的子路径

static int CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM , LPARAM lpData)   
{
    if(uMsg == BFFM_INITIALIZED)
    {
        CTreeCtrl	treePath;
        HTREEITEM	hItemSel;
        ::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);
        treePath.SubclassWindow(::GetDlgItem(hWnd, 0x3741));
        hItemSel	= treePath.GetSelectedItem();
        treePath.Expand(hItemSel, TVE_COLLAPSE);
        treePath.UnsubclassWindow();
    } 
    return 0;  
}
调用方式

SetFolderPath(IDC_EDIT_LOG_PATH);    



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值