文件夹选择对话框的使用

文件夹选择对话框的使用

一. 示例代码

 CString iDir;
 BROWSEINFO bi;
 bi.hwndOwner = this->m_hWnd;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = m_Dir.GetBuffer(512);
 bi.lpszTitle = _T("选择保存的文件夹");
 bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
 bi.lpfn = NULL;
 bi.lParam = 0;
 bi.iImage = 0;
 ITEMIDLIST* pidl = ::SHBrowseForFolder(&bi);

 if (::SHGetPathFromIDList(pidl, m_Dir.GetBuffer(512)))
    m_Dir.ReleaseBuffer();

二. ROWSEINFO结构说明

typedef struct _browseinfo {
  HWND hwndOwner;
  LPCITEMIDLIST pidlRoot;
  LPTSTR pszDisplayName;
  LPCTSTR lpszTitle;
  UINT ulFlags;
  BFFCALLBACK lpfn;
  LPARAM lParam;
  int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

hwndOwner:                          对话框的所有者
pidlRoot:                                从何根路径开始展开文件夹,缺省情况下从“桌面”开始展开.
pszDisplayName:                指向一个缓存,该缓存返回用户选中的文件夹的显示名称,
                                                缓存的大小设置为MAX_PATH
lpszTitle:                               对话框上的treeview控件上方显示的标题, 并不是对话框的标题
ulFlags:                                显示标志控制项.
                                               BIF_RETURNONLYFSDIRS, 只有当用户选中的是文件夹时"确定"按钮才有效
                                               BIF_BROWSEFORCOMPUTER, 只有选中"我的电脑"时"确定"按钮才有效
                                               BIF_EDITBOX, 在对话框上显示一个Edit,允许用户输入选中项的名称
                                               BIF_STATUSTEXT, 界面上包含一块statu区域, 回调函数通过向对话框发送
                                                                 BFFM_SETSTATUSTEXT消息设置静态文本
                                               BIF_VALIDATE, 当用户在Edit中输入不正确的名字时,向对话框发送
                                                                 BFFM_VALIDATEFAILED消息,并调用对话框的回调函数处理该消息
lpfn                                       设置处理对话框事件的回调函数
lParam                                对话框传递给回调函数的参数
iImage                                返回与选中文件夹关联的图片的index , 该index是图片在系统ImageList中的index值.

三.  SHBrowseForFolder函数

LPITEMIDLIST WINAPI SHBrowseForFolder(
  LPBROWSEINFO lpbi
);
该函数显示文件夹选择对话框, 并允许用户选择文件夹.
返回值是指向一个ITEMIDLIST结构的指针, 该结构指定根目录下用户选中的文件夹.
如果在对话框上用户选择的 "取消"按钮, 则返回NULL

四.  SHGetPathFromIDList函数

WINSHELLAPI BOOL WINAPI SHGetPathFromIDList( 
  LPCITEMIDLIST pidl, 
  LPSTR pszPath 
);

该函数将ITEMIDLIST结构转换为文件系统路径.
pidl是待转换的ITEMIDLIST的指针
pszPath是转换后返回的字符串, 该字符串的最大长度为PATH_MAX

如果转换成功返回TRUE, 否则为FALSE

 

你可能感兴趣的:(winapi,imagelist,null,struct,bi,path)