图中“打开文件”按钮添加响应函数OnBnClickedButton1,用CFileDialog过滤文件类型并打开选择文件对话框, MFC提供的类CFileDialog只能用来打开文件。将选中的文件路径显示在Edit Control控件中
void CTestSelectfileDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//选中具体的文件 below MFC提供的类CFileDialog只能用来打开文件
CFileDialog pFileDlg(TRUE,_T(""),_T(""),OFN_HIDEREADONLY,_T("Joint Picture Group(*.jpg)|*.jpg;*.ico;;*.bmp;*.png;*.gif;*.tif|ALL Files(*.*)|*.*||"),this);
//第一个参数:true,打开,false,保存; 2.默认的扩展名;3.默认的文件名 ;3.OFN_HIDEREADONLY:隐藏只读复选框;4.文件类型过滤;
//5.文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 各种图片之间用;间隔
if(IDOK == pFileDlg.DoModal())
{
CString pathName = pFileDlg.GetPathName();
CString fileName = pFileDlg.GetFileTitle();
//显示路径到界面 Edit Control控件中
SetDlgItemText(IDC_EDIT1,pathName); //Edit控件IDC_EDIT1
//选中具体的文件 above
}
}
(1)图中“打开文件夹”按钮添加响应函数OnBnClickedButton2,其中用SHBrowseForFolder来打开选择文件夹界面。
将选择的文件夹路径显示在EditControl中。
(2)程序中提供多种打开文件的路径,a.选择文件夹中的所有文件;b,选择文件夹中的jpg格式文件,c.固定路径的jpg格式文件;d.选择文件夹中的多种格式文件如jpg,ico,bmp, png,gif,tif,用字符串数组CStringArray加for循环实现。
(3)用_findfirst和_findnext来实现读取多个文件名,最终显示在ListBox控件中。
void CTestSelectfileDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CString m_FileDir;
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = m_hWnd;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
BOOL bRet = FALSE;
TCHAR szFolder[MAX_PATH*2];
szFolder[0] = _T('/0');
if (pidl)
{
if (SHGetPathFromIDList(pidl, szFolder))
bRet = TRUE;
IMalloc *pMalloc = NULL;
if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
m_FileDir = szFolder;//选择的文件夹路径
//SetDlgItemText(IDC_EDIT4,m_FileDir);//将路径显示在EditControl中
GetDlgItem(IDC_EDIT4)->SetWindowText(m_FileDir);//将路径显示在EditControl中
long Handle;//用于查找的句柄
struct _finddata_t fileinfo;
//CString Path = m_FileDir + "*.*";//选择文件夹中的所有文件
/* CString Path = m_FileDir + "*.jpg";*/ //选择文件夹中的jpg格式文件
/* CString Path = "E:\\*.jpg";*/ //固定路径的jpg格式文件
//选择文件夹中的多种格式文件jpg,ico,bmp, png,gif,tif,
CStringArray SA;
SA.Add("*.jpg");
SA.Add("*.ico");
SA.Add("*.bmp");
SA.Add("*.png");
SA.Add("*.gif");
SA.Add("*.tif");
int SA_Size = SA.GetSize();
for (int i = 0; i
(1).给显示图片名称的LIstBox控件添加鼠标左键双击事件OnLbnDblclkList1
(2)在 OnLbnDblclkList1中添加图片显示代码,先获取图片路径,再显示。
void CTestSelectfileDlg::OnLbnDblclkList1()
{
// TODO: 在此添加控件通知处理程序代码
CImage m_img; //对象创建一定要加在这里,因为每次双击打开图片时,都是一个新的对象,否则会出现EXPRESSION:m_hBitmap == 0的错误。
CString m_filename;
CString m_pathFolder;
int nIndex = m_ListBox.GetCurSel();
m_ListBox.GetText(nIndex,m_filename);//将选中文件名存入m_filename中
//获取文件夹路径
GetDlgItem(IDC_EDIT4)->GetWindowText(m_pathFolder);
CString strPicPath = m_pathFolder + m_filename;
m_img.Load(strPicPath);
CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);//拖入Static Text控件,ID为IDC_STATIC,
CDC *pc = pWnd->GetDC(); //获取控件DC
CRect rctWindowSize;//矩形类对象 rctWindowSize
pWnd->GetClientRect(&rctWindowSize);//获取控件矩形区域
m_img.StretchBlt(pc->m_hDC,0,0, rctWindowSize.Width(),rctWindowSize.Height(), SRCCOPY); //显示图片
}