vc选取及保存文件对话框\浏览文件夹对话框

vc选取及保存文件对话框\浏览文件夹对话框

首先在Dialog上添加控件如下图:


在OnSelectFile()中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     CFileDialog  m_ReadDlg(TRUE);
     m_ReadDlg.m_ofn.lpstrTitle= "New File" ; //title of the CFiledialog
     m_ReadDlg.m_ofn.lpstrFilter= "csv file *.csv\0*.csv\0All File(*.*)\0*.*\0\0" ;
                 
     if  (IDOK==m_ReadDlg.DoModal())
     {
         m_FileName=m_ReadDlg.GetPathName();
         CString str=m_FileName.Mid(m_FileName.ReverseFind( '.' )+1);
         if  (str!= "csv" )
         {
             MessageBox( "Please check the file!" );
             return ;
         }
         UpdateData(FALSE);
//      m_ReadFile.ReadCsvfile(m_FileName);

代码说明:

m_ofn 是类型 OPENFILENAME结构。 此结构的数据表示 CFileDialog的当前状态。使用此结构初始化 打开的文件 或 保存文件 对话框的外观,在构造之后,但是,在显示其与 DoModal 方法。


CString::mid()用法参考上一篇文章


此时,m_FileName保存了文件的路径,下面继续做读文件操作。


文件的保存方式与读取方式基本相同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CString strFile;     
CString defExe( "dat" );     
CString defFileName( "*.dat" );     
CString defFilter( "数据文档(*.dat)|*.dat|所有文件(*.*)|*.*|" );     
CFileDialog dlg( true ,defExe,defFileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,defFilter);     
dlg.m_ofn.lpstrInitialDir=  "c:\\windows\\" //指定默认打开的文件夹     
if (dlg.DoModal()==IDOK)     
{     
    strFile = dlg.GetPathName();     
    MessageBox(strFile);     
}    
      
在上述代码中,我们指定了一个默认的文件夹“C:\windows”,当你运行上段代码时,文件选择对话框就会打开你设置的默认文件夹;如果此文件夹不存在,就会打开它自己默认的文件夹,比如“我的文档”。 
      
上述代码中,defExe是定义了默认打开的文件类型(扩展名),defFileName则定义了打开的文件名,defFilter是过滤文件类型。 当你点击“确定”,就会进入 if 语句中,strFile则得到你选择的文件全部路径,如 “C:\windows\system32\cmd.exe”等。

运行效果如下图:


具体使用方法还是查看MSDN或者百度搜 CFileDialog的用法


浏览文件夹对话框

如下图


打开一个文件夹对话框没有现成的MFC类可用,需要借助一类称为Shell操控的API函数。

其实说白了直接将下面的代码复制到你的代码里,然后利用savepath2的路径即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
BROWSEINFO bi;  
ZeroMemory(&bi, sizeof (BROWSEINFO));  //指定存放文件的默认文件夹路径
bi.lpszTitle= "请选择文件夹" ;       //添加提示语句
bi.ulFlags=0x0040 | BIF_EDITBOX;     //添加“新建文件夹项”
LPMALLOC pMalloc;    
LPITEMIDLIST pidl = SHBrowseForFolder(&bi); //以默认路径打开浏览文件夹对话框
TCHAR  * savepath =  new  TCHAR [MAX_PATH]; 
CString savepath2= "" ;  
if (pidl != NULL)   
{
     SHGetPathFromIDList(pidl,savepath); //把文件夹路径存放在savepath中
     savepath2.Format(_T( "%s" ),savepath);
     savepath2=savepath2+ "\\" ; //在路径后增加斜杠 
     if (SUCCEEDED(SHGetMalloc(&pMalloc))) //网上说pidl指向的对象用完应该释放
    
         pMalloc->Free(pidl);
         pMalloc->Release();
     }   
}   
    MessageBox(savepath2); //显示所选文件夹路径



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值