VC 文件对话框 目录选择

原创 2011年01月07日 22:20:00

1. CFileDialog使用总结

例子:

CFileDialog openDlg( TRUE, "Material File(*.material)|*.material", NULL,

       OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

       "Material File(*.material)|*.material||", this);

 

 

CFileDialog构造函数原型如下:

CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,

        LPCTSTR lpszFileName = NULL,

       DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

       LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

 

参数意义如下:

bOpenFileDialog          为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。

lpszDefExt                   指定默认的文件扩展名。

lpszFileName              指定默认的文件名。

dwFlags                       指明一些特定风格。 (默认OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)

lpszFilter                     指明可供选择的文件类型和相应的扩展名。

pParentWnd                为父窗口指针。

 

其中,扩展名应遵循下面的格式:

"Chart Files (*.xlc)|*.xlc| Worksheet Files (*.xls)|*.xls| Data Files (*.xlc;*.xls)|*.xlc ; *.xls| All Files (*.*)|*.*||";

文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

 

CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt

CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt

CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt

CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1

POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

 

dwFlags的风格有:

#define OFN_READONLY                        0x00000001
#define OFN_OVERWRITEPROMPT          0x00000002
#define OFN_HIDEREADONLY                0x00000004
#define OFN_NOCHANGEDIR                 0x00000008
#define OFN_SHOWHELP                      0x00000010
#define OFN_ENABLEHOOK                   0x00000020
#define OFN_ENABLETEMPLATE           0x00000040
#define OFN_ENABLETEMPLATEHANDLE     0x00000080
#define OFN_NOVALIDATE                     0x00000100
#define OFN_ALLOWMULTISELECT         0x00000200
#define OFN_EXTENSIONDIFFERENT       0x00000400
#define OFN_PATHMUSTEXIST              0x00000800
#define OFN_FILEMUSTEXIST                0x00001000
#define OFN_CREATEPROMPT               0x00002000
#define OFN_SHAREAWARE                  0x00004000
#define OFN_NOREADONLYRETURN        0x00008000
#define OFN_NOTESTFILECREATE                   0x00010000
#define OFN_NONETWORKBUTTON        0x00020000
#define OFN_NOLONGNAMES                        0x00040000   

 

需要注意的是,用了CFileDialog之后,会把程序的当前路径设置成选中文件的路径
所以,如果程序里有用到IO访问或者数据库访问之类的本地操作时,需要注意你的当前路径
用相对路径的话就不是原来你的程序路径了,切记!

 

 ----------------------------------------------------------------------------------------------------------

 打开文件对话框
const char pszFilter[] = _T("EXE File (*.txt)|*.txt|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
pszFilter, this);
dlg.m_ofn.lpstrInitialDir = "c://WINDOWS//" //设置对话框默认呈现的路径
if(dlg.DoModal() == IDOK)
{
       CString strFilePath = dlg.GetPathName();
      /*如果有多个文件,则
      for(POSITION pos = dlg.GetStartPosition(); pos!=NULL; )
      { CString strFilePathName = dlg.GetNextPathName(pos);}*/
}

 

//保存文件对话框
const char pszFilter[] = _T("EXE Files (*.txt)|*.txt||");
CFileDialog dlgSave( FALSE, //FALSE为保存
_T(".txt"), //自动加上的扩展名
_T("Output.txt"), //默认保存的文件名
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
pszFilter, this);

//目录选择对话框
BROWSEINFO bi;
char szPathName[MAX_PATH];
char szTitle[] = "选择路径"
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = GetSafeHwnd();
bi.pszDisplayName = szPathName;
bi.lpszTitle = szTitle;
bi.ulFlags = 0x0040 ;
CString str;
CString strDir; //选择的目录

LPITEMIDLIST idl = SHBrowseForFolder(&bi);
if(idl == NULL)
{
     strDir= ""
     return;
}
SHGetPathFromIDList(idl, str.GetBuffer(MAX_PATH * 2));
str.ReleaseBuffer();
if(str != "" && str.GetAt(str.GetLength() - 1) != '//')
str += "//"
strDir = str;

 

--------------------------------------------------------------------------------------------

   BROWSEINFO bi;
    //TCHAR Buffer[MAX_PATH];
    //初始化入口参数bi开始
    bi.hwndOwner = AfxGetMainWnd()->GetSafeHwnd();
    bi.pidlRoot = NULL;
    bi.pszDisplayName = m_path;//此参数如为NULL则不能显示对话框
    bi.lpszTitle = _T("选择路径");
    bi.ulFlags = BIF_RETURNONLYFSDIRS;
    bi.lpfn = NULL;
    bi.iImage = 0;
   //初始化入口参数bi结束
   LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框
   if(pIDList)
   {
       SHGetPathFromIDList(pIDList, m_path);
       //取得文件夹路径到Buffer里
    //AfxMessageBox(Buffer);
    GetDlgItem(IDC_PATH)->SetWindowText(m_path);
   }

 

 =======================================================================================================

1.打开文件

(1)  static char szFilter[]="Text文档(*.txt)|*.txt|Word文档(*.doc,*.rtf)|*.doc;*rtf|Excel文档(*.xls)|*.xls|All Files(*.*)|*.*||";
 CFileDialog dlg(TRUE,"txt",NULL,OFN_HIDEREADONLY,szFilter);
 if(dlg.DoModal() != IDOK)
  return;
 SetDlgItemText(IDC_SOUREFILEPATH_EDT,dlg.GetPathName()); 

(2)CFileDialog file(true,"rar",NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|
  OFN_EXPLORER,"RAR文件(*.rar)|*.rar",this);
 if(file.DoModal()==IDOK)
 {
  CString path=file.GetPathName();
  GetDlgItem(IDC_EDSOURCE)->SetWindowText(path);
 

2.保存文件

 (1)int nPostion=0;
    CString strFileName="";
 CString strSimpleName="";
 GetDlgItemText(IDC_SOUREFILEPATH_EDT,strFileName);
    nPostion=strFileName.ReverseFind('\\');
 strSimpleName=strFileName.Right(strFileName.GetLength()-nPostion-1);
 strSimpleName+=".huf";

 static char szFilter[]="Huf压缩文档(*.huf)|*.huf|";
 CFileDialog dlg(FALSE,"huf",strSimpleName,OFN_HIDEREADONLY,szFilter);
 if(dlg.DoModal() != IDOK)
  return;
 SetDlgItemText(IDC_HUFFILEPATH_EDT,dlg.GetPathName());

(2) BROWSEINFO bi;  
 char buffer[MAX_PATH];  
 ZeroMemory(buffer,MAX_PATH);  
 bi.hwndOwner=GetSafeHwnd();  
 bi.pidlRoot=NULL;  
 bi.pszDisplayName=buffer;  
 bi.lpszTitle="选择一个文件夹";  
 bi.ulFlags=BIF_EDITBOX;  
 bi.lpfn=NULL;  
 bi.lParam=0;  
 bi.iImage=0;
 LPITEMIDLIST pList=NULL;  
 if((pList=SHBrowseForFolder(&bi))!=NULL)  
  
 char path[MAX_PATH];
 ZeroMemory(path,MAX_PATH);
 SHGetPathFromIDList(pList,path);
 GetDlgItem(IDC_EDDES)->SetWindowText(path);
 }

3.压缩文件

 CString des,temp,path,rarpath;
 GetDlgItem(IDC_EDDES)->GetWindowText(des);
 path.Format("%s\\*.*",des);
 rarpath.Format("%s\\mingrisoft.rar",des);
 temp.Format("a %s %s",rarpath,path);
 ::ShellExecute(NULL,"open","WinRar.exe",temp,NULL,SW_SHOW);

4.解压文件

CString source,path,temp;
 GetDlgItem(IDC_EDSOURCE)->GetWindowText(source);
 int pos=source.Find(".");
 path=source.Left(pos);
 temp.Format("X %s %s",source,path);
 ::CreateDirectory(path,NULL);
 ::ShellExecute(NULL,"open","WinRar.exe",temp,NULL,SW_SHOW);

 

 

 

相关文章推荐

VC++实现文件选择对话框 及目录

VC++实现文件选择对话框 及目录   2010-04-26 22:19:49|  分类: 默认分类 |  标签: |字号大中小 订阅 char Filter[]=...

选择目录和选择文件对话框

  • 2013年10月10日 14:43
  • 130KB
  • 下载

VC++选择文件对话框实现

char szFilter[] = {"All Files(*.*)|*.*||"}; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_...

MFC选择目录SHBrowseForFolder选择文件CFileDialog对话框设置默认路径

大气象学习园地 博客园新闻新随笔管理订阅 随笔- 664  文章- 1  评论- 2638  MFC选择目录SHBrowseForFo...

vc++打开目录对话框类

  • 2013年02月21日 22:20
  • 2KB
  • 下载

VS2010对话框,FTP遍历目录显示在对话框中,选择列表项下载文件或者目录主程序代码

新手入门,借鉴了很多地方写的

[MFC]选择目录对话框和选择文件对话框

在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 //选择目录按钮 void CDcPackerDlg::OnBnCl...

选择目录对话框和选择文件对话框——CFileDialog

网上相关文章很多,现简单整理如下 1、CFileDialog构造函数 1 CFileDialog:CFileDialog(BOOL     bOpenFileDi...

MFC 选择目录对话框和选择文件对话框

转自:http://www.cppblog.com/finehai/archive/2009/08/27/94578.html 选择目录对话框 //选择目录按钮 void CDcPackerDl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC 文件对话框 目录选择
举报原因:
原因补充:

(最多只允许输入30个字)