文件夹地址

方法一:

以下代码直接选取文件夹地址:

LPITEMIDLIST   pidlPath;  

    TCHAR   pszDplName[MAX_PATH];  

    BROWSEINFO   biFile;  

    IMalloc   *pDllMlc;  

    biFile.hwndOwner   =  m_hWnd;  

    biFile.pidlRoot   =  NULL;  

    biFile.pszDisplayName   =  NULL;  

    biFile.lpszTitle   =  _T("请选择要打开的文件夹:");  

    biFile.ulFlags   =   BIF_RETURNFSANCESTORS;  

    biFile.lpfn   =  NULL;  

    biFile.lParam   =  NULL;  

    biFile.iImage   =  0;  

    if(SUCCEEDED(SHGetMalloc(&pDllMlc)))  

    {  

        pidlPath=SHBrowseForFolder(&biFile);  

        if(pidlPath  !=   NULL)  

        {

            SHGetPathFromIDList(pidlPath,pszDplName);    //pszDplName:文件的路径地址         this->MessageBox(pszDplName);                //显示获取的地址

            //MessageBox(_T(" dada"),pszDplName,MB_OK);

        }

        else

            return;  

        pDllMlc->Free(NULL);  

        pDllMlc->Release();

    }

以上代码直接复制黏贴就可以出效果

 

///

///

方法二:

 

MFC中没有对文件夹进行直接调用的。必须使用SDK函数..
1.
编程思路:
SDK
SHBrowseForFolder函数实现文件夹对话框。其定义如下:

LPITEMIDLISTSHBrowseFolder(LPBROWSEINFO lpbi);

参数说明如下:

lpbi 指向BROWSEINFO的数据结构

BROWSEINFO的数据结构包含了文件夹的对话框信息,定义如下:

typedefstruct _browseinfo
{
HWND hwndOwner;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT uFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;

该函数返回的是一个ITEMIDLIST 的数据结构的指针,调用SDKSHGetPathFromIDList函数可
将其转为文件路径。ITEMIDLIST数据结构定义为:

typedefstruct _ITEMIDLIST 
{
SHITEMID mkid;
}ITEMIDLIST ,*LPITEMIDLIST;

SHGetPathFromIDList函数定义如下:

BOOLSHGetPathFromIDList(LPCITEMIDLIST pidl,LPSTR pszPath);


2.编程步骤:

<1>创建一个基类为CObject的类CFolderDialog;

<2>CFolderDialog类中,添加成员变量,如下:

               LPCITEMIDLIST m_pidl;
BROWSEINFO m_bi;

<3>在类CFolderDialog的构造函数中,添加初始化量,如下:


               memset(&m_bi,0,sizeof(BROWSEINFO));
m_bi.pidlRoot = pidlRoot;
m_bi.pszDisplayName = lpszDisplayName;
m_bi.lpszTitle = lpszTitle;
m_bi.ulFlags = nFlags;
m_pidl = NULL;


<4>CFolderDialog类中添加DoModal成员函数,代码如下:

intCFolderDialog::DoModal()
{
int nResult = 0;
m_pidl = SHBrowseForFolder(&m_bi);
if (m_pidl != NULL)
{
   nResult = IDOK;
}
else
{
   nResult = IDCANCEL;
}
return nResult;
}

<5>CFolderDialog类中添加GetPathName()成员函数,代码如下:

CStringCFolderDialog::GetPathName()
{
CString strPathName = _T("");
TCHAR szPathName[MAX_PATH];
if (::SHGetPathFromIDList(m_pidl,szPathName))
{
   strPathName = szPathName;
   //
去掉最后的'/'
   if (strPathName.Right(1) == _T("//"))
   {
    strPathName = strPathName.Left(strPathName.GetLength()-1);
   }
}
return strPathName;

}

<6>在对话框类中添加一个对话框的响应按钮,用来调用这个打开文件夹的.,代码如下:

void CStatistics1Dlg::OnBrowseFolder()//浏览文件夹
{
// TODO: Add your control notification handler code here
CFolderDialog dlg(NULL,NULL,_T("
文件夹列表"),BIF_RETURNONLYFSDIRS);
if (dlg.DoModal() == IDOK)
{
   CString strPathNmae = dlg.GetPathName();
   CString strText = _T("");
   strText.Format(_T("%s"),strPathNmae);
   //AfxMessageBox(strText);
   m_strPath = strPathNmae;
   UpdateData(FALSE);
}
}


这样通过点击按钮,就可以打开一个对话框,进行操作了....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值