制作选择目录和选择文件对话框,一般用到BROWSEINFO结构,如下:
- BROWSEINFO结构:
- HWND hwndOwner,指定对话框的父窗口的句柄
- LPCITEMIDLIST pidlRoot,指定打开浏览的根目录,若为NULL,表示桌面
- LPSTR pszDisplayName,指定一个缓冲区,接收用户选择的目录的显示名称
- LPCSTR lpszTitle,树形视图上方显示的文字
- UINT ulFlags,指定属性
- BFFCALLBACK Lpfn,指定回调函数,发生某些事件时,指定的函数被调用,允许程序进一步定制对话框的行为
- LPARAM lParam,若指定回调函数,参数值传递给回调函数
- int iImage,代表用户选择的文件夹对象的图标在系统图标列表中的索引
下面贴上选择目录对话框的代码实现:
void CExchangeDlg::OnBrowser() // 选择目录,我这里是浏览按钮
{
char szPath[MAX_PATH];
CString str;
ZeroMemory(szPath,sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner=m_hWnd;
bi.pidlRoot=NULL;
bi.pszDisplayName=szPath;
bi.lpszTitle="请选择所需目录:";
bi.ulFlags=0;
bi.lpfn=NULL;
bi.lParam=0;
bi.iImage=0;
LPITEMIDLIST lp=SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp,szPath))
{
str.Format("选择的目录为 %s",szPath);
AfxMessageBox(str);
}else{
AfxMessageBox("无效的目录,请重新选择");
}
m_selectFile=szPath;
UpdateData(FALSE);
}
文件选择对话框实现代码:
CString strFile=_T(" ");
CFileDialog dlgFile(TRUE,NULL,NULL,OFN_HIDEREADONLY,
_T("Describe Files(*.cfg) | *.cfg | All Files(*.*) | *.* |"),NULL);
if(dlgFile.DoModal())
{
strFile=dlgFile.GetPathName();
}
m_selectFile=strFile; //m_selectFile对话框中静态文本框关联的变量