获取一个文件夹的路径

主要函数:

1、SHBrowseForFolder

WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(
    LPBROWSEINFO lpbi
);

参数lpbi是指向BROWSEINFO结构的指针,该结构用来设置要弹出的浏览框的相关参数,说明如下:

typedef struct _browseinfo {
    HWND hwndOwner; //Handle to the owner window for the dialog box(这句话E文更好懂,呵呵)
    LPCITEMIDLIST pidlRoot; //浏览的根目录,只有以指定目录为根的目录树会出现在浏览框中。取值NULL,则是桌面
    LPSTR pszDisplayName; //用来保存选择的文件夹名称的缓冲
    LPCSTR lpszTitle; //框框的标题栏下面的说明文字,想显什么就填什么
    UINT ulFlags; //样式旗标;

    /*关于旗标选几个常用值说明一下:

       BIF_BROWSEINCLUDEFILES:既显示文件夹,也显示夹里的文件;为指定该选项时一般只能看到文件夹,看不到其下的文件

       BIF_RETURNONLYFSDIRS:只在用户选择文件系统下的文件夹时能点“确定”

   */
    BFFCALLBACK lpfn; //回调,这里不管
    LPARAM lParam; //上面那个回调函数的参数,不管
    int iImage; //框中条目相关的图标,不管,设为0
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

返回值:

若选了“确定”,则是选择的那个文件夹对应的ItemList,SHGetPathFromIDList用它来得到相应路径

若选了“取消”,则是NULL

2、SHGetPathFromIDList

 

//--------------------------------------------------

e.g

void CXXDlg::OnButtonAddfold()
{
 // TODO: Add your control notification handler code here
 BROWSEINFO bi;
 bi.hwndOwner = GetSafeHwnd();
 bi.iImage = 0;
 bi.lParam = NULL;
 bi.lpfn = NULL;
 bi.lpszTitle = _T("请选择一个文件或文件夹");
 bi.pidlRoot = NULL;
 bi.pszDisplayName = NULL;
 bi.ulFlags = BIF_BROWSEINCLUDEFILES;

 LPITEMIDLIST pList = SHBrowseForFolder(&bi);
 if(NULL != pList)
 {
  TCHAR szPath[MAX_PATH] = {0};
  SHGetPathFromIDList(pList, szPath);//此时szPath保存了选定的文件夹或文件的路径

  //利用szPath来做些事
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值