使用vc打开目录选择对话框

来源:互联网 发布:编程培训机构logo 编辑:程序博客网 时间:2024/04/27 14:46
打开目录选择对话框可以使用API函数SHBrowseForFolder来实现。
 该函数原型为:
      LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi); 
 其中LPBROWSEINFO为BROWSEINFO结构的指针。

BROWSEINFO结构如下:
typedef struct _browseinfo {
    HWND hwndOwner;
    LPCITEMIDLIST pidlRoot;
    LPSTR pszDisplayName;
    LPCSTR lpszTitle;
    UINT ulFlags;
    BFFCALLBACK lpfn;
    LPARAM lParam;
    int iImage;
} BROWSEINFO;

调用例子如下:

CString GetSaveFolder()
{
 CString sFolderPath;
 BROWSEINFO bi; 
 TCHAR Buffer[MAX_PATH];
 LPITEMIDLIST pIDList;
 LPMALLOC pMalloc;
 
 ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 if (!SUCCEEDED(::SHGetMalloc(&pMalloc)))
 {
  return sFolderPath;
 }

 ZeroMemory(&bi,sizeof(bi));
 //初始化入口参数bi开始
 bi.hwndOwner = NULL;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = Buffer;
 bi.lpszTitle = _T("请选择招标文件的保存路径:");
 bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS;
 bi.lpfn = NULL;
 bi.iImage = 0;
 //初始化入口参数bi结束
 pIDList= SHBrowseForFolder(&bi);   //调用显示选择对话框
 if(pIDList != NULL)
 {
  //取得文件夹路径到Buffer里
  if(SHGetPathFromIDList(pIDList, Buffer))
  {   
   sFolderPath = Buffer;
  }
  else
  {
   sFolderPath = _T("");
  }
  pMalloc->Free(pIDList);
 }
 pMalloc->Release();
 return sFolderPath;
}

注意:其中BROWSEINFO的ulFlags的值设为BIF_NEWDIALOGSTYLE,可以使弹出的目录选择对话框允许用户交互,

能够添加文件夹等功能。

参考文章:VC打开目录选择对话框