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

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

图中“打开文件”按钮添加响应函数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
    }
}

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

(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<SA_Size; i++)
    {
         CString Path = m_FileDir + SA.GetAt(i);
         Handle =  _findfirst(Path,&fileinfo);
         if (-1 == Handle)
         {
             return;
         }
         do 
         {
             m_ListBox.AddString(fileinfo.name);  //文件名显示在ListBox控件中
         } while (!_findnext(Handle,&fileinfo));
    }
    _findclose(Handle);
    return;
}

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

(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); //显示图片
}

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值