在VC++编程中,有很多地方要用到文件夹浏览对话框,在version5.0版本(微软控件版本,一般在Windows2000之前)之前若想在文件夹浏览对话框上加一个新建文件夹按钮,需要自己编程来实现,现在在version5.0版本后,只需设置一个参数就可以了,而且有上下文菜单。如下图所示:(点此下载整个示例工程,本工程略加改动即可使用于自己的程序中。本工程亦可作为初学者的教程,一般教材很少讲文件夹浏览公用对话框的用法。)
示例工程中主要代码如下:
void CPathTestDlg::OnButtonBrowse()
{
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="Select folder";
bi.ulFlags=80;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
str.ReleaseBuffer();
m_strSavePath=str;
if(str.GetAt(str.GetLength()-1)!='//')
m_strSavePath+="//";
UpdateData(FALSE);
}
其中bi.ulFlags 是对话框的格式,通过选定不同的参数来显示不同风格的对话框.
示例工程中主要代码如下:
void CPathTestDlg::OnButtonBrowse()
{
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="Select folder";
bi.ulFlags=80;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
str.ReleaseBuffer();
m_strSavePath=str;
if(str.GetAt(str.GetLength()-1)!='//')
m_strSavePath+="//";
UpdateData(FALSE);
}
其中bi.ulFlags 是对话框的格式,通过选定不同的参数来显示不同风格的对话框.