SHBrowseForFolder象CFileDialog一样获取文件夹路径

CFileDialog类使得用户可以通过弹出的对话框选择一个文件,但却无法实现对文件夹的选择,不过可以通过SHBrowseForFolder实现,但使用它用户看到的将是一个树状控件。

要使用这个函数,首先要弄清楚BROWSEINFO结构: 

hwndOwner: handle to the owner window of the dialog box

pidRoot: 指向一个结构的指针,这个指针用来说明在树状控件中开始浏览的文件夹,只有它以及它的子文件夹会显示在对话框中,可以简单地设置为NULL,这样对话框中将从桌面开始显示

pszDisplayName: 指向一个buffer的指针,用来保存用户选择的文件夹的名称,也可以简单地设置为NULL

lpszTitle:指定对话框的title

ulFlags:设置对话框的选项

  BIF_RETURNONLYFSDIRS: 只返回文件系统文件夹,如果用户选择的文件夹不是文件系统的一部分,OK按钮将是灰色的

lpfn: 指向一个回调函数的指针

lParam:如果指定了回碉函数,从对话眶传递给回调函数的参数

iImage:这个的用处不太清楚

 

以BROWSEINFO为参数调用SHBrowseForFolder,如果成功,再调用SHGetPathFromIDList从返回的结果中获取到选择的文件夹的全路径

 

  BROWSEINFO   bInfo;  
  ZeroMemory(&bInfo,   sizeof(bInfo));  
  bInfo.hwndOwner   =   m_hWnd;  
  TCHAR   tchPath[255];  
  bInfo.lpszTitle   =   _T(" 请选择路径:   ");  
  bInfo.ulFlags   =   BIF_RETURNONLYFSDIRS;          
   
  LPITEMIDLIST   lpDlist;  
  //用来保存返回信息的IDList,使用SHGetPathFromIDList函数转换为字符串  
  lpDlist   =   SHBrowseForFolder(&bInfo)   ;   //显示选择对话框  
  if(lpDlist   !=   NULL)  
  {  
  SHGetPathFromIDList(lpDlist,   tchPath);//把项目标识列表转化成目录  
  TRACE(tchPath);  
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值