当前位置:   article > 正文

MFC选择指定文件并显示路径,MFC打开文件夹显示文件夹中多种类型的文件名,双击图片名显示图片_mfc 双击打开图片

mfc 双击打开图片

1.选择指定文件并显示路径

图中“打开文件”按钮添加响应函数OnBnClickedButton1,用CFileDialog过滤文件类型并打开选择文件对话框, MFC提供的类CFileDialog只能用来打开文件。将选中的文件路径显示在Edit Control控件中

 

  1. void CTestSelectfileDlg::OnBnClickedButton1()
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. //选中具体的文件 below MFC提供的类CFileDialog只能用来打开文件
  5. CFileDialog pFileDlg(TRUE,_T(""),_T(""),OFN_HIDEREADONLY,_T("Joint Picture Group(*.jpg)|*.jpg;*.ico;;*.bmp;*.png;*.gif;*.tif|ALL Files(*.*)|*.*||"),this);
  6. //第一个参数:true,打开,false,保存; 2.默认的扩展名;3.默认的文件名 ;3.OFN_HIDEREADONLY:隐藏只读复选框;4.文件类型过滤;
  7. //5.文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 各种图片之间用;间隔
  8. if(IDOK == pFileDlg.DoModal())
  9. {
  10. CString pathName = pFileDlg.GetPathName();
  11. CString fileName = pFileDlg.GetFileTitle();
  12. //显示路径到界面 Edit Control控件中
  13. SetDlgItemText(IDC_EDIT1,pathName); //Edit控件IDC_EDIT1
  14. //选中具体的文件 above
  15. }
  16. }

2.打开指定文件夹并显示其中多种指定文件名 

(1)图中“打开文件夹”按钮添加响应函数OnBnClickedButton2,其中用SHBrowseForFolder来打开选择文件夹界面。

将选择的文件夹路径显示在EditControl中。

(2)程序中提供多种打开文件的路径,a.选择文件夹中的所有文件;b,选择文件夹中的jpg格式文件,c.固定路径的jpg格式文件;d.选择文件夹中的多种格式文件如jpg,ico,bmp, png,gif,tif,用字符串数组CStringArray加for循环实现。

(3)用_findfirst和_findnext来实现读取多个文件名,最终显示在ListBox控件中。

 

  1. void CTestSelectfileDlg::OnBnClickedButton2()
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. CString m_FileDir;
  5. BROWSEINFO bi;
  6. ZeroMemory(&bi, sizeof(BROWSEINFO));
  7. bi.hwndOwner = m_hWnd;
  8. bi.ulFlags = BIF_RETURNONLYFSDIRS;
  9. LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
  10. BOOL bRet = FALSE;
  11. TCHAR szFolder[MAX_PATH*2];
  12. szFolder[0] = _T('/0');
  13. if (pidl)
  14. {
  15. if (SHGetPathFromIDList(pidl, szFolder))
  16. bRet = TRUE;
  17. IMalloc *pMalloc = NULL;
  18. if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)
  19. {
  20. pMalloc->Free(pidl);
  21. pMalloc->Release();
  22. }
  23. }
  24. m_FileDir = szFolder;//选择的文件夹路径
  25. //SetDlgItemText(IDC_EDIT4,m_FileDir);//将路径显示在EditControl中
  26. GetDlgItem(IDC_EDIT4)->SetWindowText(m_FileDir);//将路径显示在EditControl中
  27. long Handle;//用于查找的句柄
  28. struct _finddata_t fileinfo;
  29. //CString Path = m_FileDir + "*.*";//选择文件夹中的所有文件
  30. /* CString Path = m_FileDir + "*.jpg";*/ //选择文件夹中的jpg格式文件
  31. /* CString Path = "E:\\*.jpg";*/ //固定路径的jpg格式文件
  32. //选择文件夹中的多种格式文件jpg,ico,bmp, png,gif,tif,
  33. CStringArray SA;
  34. SA.Add("*.jpg");
  35. SA.Add("*.ico");
  36. SA.Add("*.bmp");
  37. SA.Add("*.png");
  38. SA.Add("*.gif");
  39. SA.Add("*.tif");
  40. int SA_Size = SA.GetSize();
  41. for (int i = 0; i<SA_Size; i++)
  42. {
  43. CString Path = m_FileDir + SA.GetAt(i);
  44. Handle = _findfirst(Path,&fileinfo);
  45. if (-1 == Handle)
  46. {
  47. return;
  48. }
  49. do
  50. {
  51. m_ListBox.AddString(fileinfo.name); //文件名显示在ListBox控件中
  52. } while (!_findnext(Handle,&fileinfo));
  53. }
  54. _findclose(Handle);
  55. return;
  56. }

3.双击图片名称在Static Text控控件中显示(Picture Control控件同理也可以)

(1).给显示图片名称的LIstBox控件添加鼠标左键双击事件OnLbnDblclkList1

(2)在 OnLbnDblclkList1中添加图片显示代码,先获取图片路径,再显示。

  1. void CTestSelectfileDlg::OnLbnDblclkList1()
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. CImage m_img; //对象创建一定要加在这里,因为每次双击打开图片时,都是一个新的对象,否则会出现EXPRESSION:m_hBitmap == 0的错误。
  5. CString m_filename;
  6. CString m_pathFolder;
  7. int nIndex = m_ListBox.GetCurSel();
  8. m_ListBox.GetText(nIndex,m_filename);//将选中文件名存入m_filename中
  9. //获取文件夹路径
  10. GetDlgItem(IDC_EDIT4)->GetWindowText(m_pathFolder);
  11. CString strPicPath = m_pathFolder + m_filename;
  12. m_img.Load(strPicPath);
  13. CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);//拖入Static Text控件,ID为IDC_STATIC,
  14. CDC *pc = pWnd->GetDC(); //获取控件DC
  15. CRect rctWindowSize;//矩形类对象 rctWindowSize
  16. pWnd->GetClientRect(&rctWindowSize);//获取控件矩形区域
  17. m_img.StretchBlt(pc->m_hDC,0,0, rctWindowSize.Width(),rctWindowSize.Height(), SRCCOPY); //显示图片
  18. }

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/281794
推荐阅读
相关标签
  

闽ICP备14008679号