选择文件
CString BootOpenDialog() //返回选择的文件名称
{
CString strFile = _T("");
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
if (dlgFile.DoModal())
{
strFile = dlgFile.GetPathName();
}
return strFile;
}
选择文件夹
void CTestDlg::OnBtnTest()
{
// TODO: Add your control notification handler code here
TCHAR pszPath[MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = TEXT("请选择文件夹");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl == NULL)
{
return;
}
if (SHGetPathFromIDList(pidl, pszPath))
{
AfxMessageBox(pszPath);
}
}
选择文件夹时在status显示路径
int CALLBACK BrowseCallBackFun(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch(uMsg)
{
case BFFM_INITIALIZED: //选择文件夹对话框初始化
//设置默认路径为lpData即'D:\'
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
//在STATUSTEXT区域显示当前路径
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, lpData);
//设置选择文件夹对话框的标题
::SetWindowText(hwnd, TEXT("请先设置个工作目录"));
break;
case BFFM_SELCHANGED: //选择文件夹变更时
{
TCHAR pszPath[MAX_PATH];
//获取当前选择路径
SHGetPathFromIDList((LPCITEMIDLIST)lParam, pszPath);
//在STATUSTEXT区域显示当前路径
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, TRUE, (LPARAM)pszPath);
}
break;
}
return 0;
}
添加好回调函数后,更改代码为——
void CTestDlg::OnBtnTest()
{
// TODO: Add your control notification handler code here
TCHAR pszPath[MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = TEXT("请选择文件夹");
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn = BrowseCallBackFun; //回调函数
bi.lParam = (LPARAM)TEXT("D:\\"); //传给回调函数的参数,设置默认路径
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl == NULL)
{
return;
}
if (SHGetPathFromIDList(pidl, pszPath))
{
AfxMessageBox(pszPath);
}
}
修改bi.ulFlag可以得到不同效果。
如要添加“新建文件夹”按钮,bi.ulFlag改为
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_USENEWUI ;
获取文件个数:
int CountDirectory(CString path,int fmt)
{
int count = 0;
CFileFind finder;
BOOL working;
switch(fmt)//要寻找的文件格式
{
case 1:
working=finder.FindFile(path + "\\*.tif");
break;
case 0:
working=finder.FindFile(path + "\\*.jpg");
break;
case 2:
working=finder.FindFile(path + "\\*.raw");
break;
}
while (working)
{
working = finder.FindNextFile();
if (finder.IsDots())
continue;
if (!finder.IsDirectory())
count++;
}
return count;
}