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);

 

 

 

文件夹选择对话框 JS实现的两种方案

/**  * browseFolder.js  * 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框  * 以供用户实现对系统文件夹选择的功能  * 文件夹选...
  • hefeng841546281
  • hefeng841546281
  • 2014年03月06日 15:14
  • 6199

windows API实现用户选择文件路径的对话框

在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出来,以图形化的方式供用户选择文件路径,而...
  • lanuage
  • lanuage
  • 2015年12月22日 20:12
  • 2374

C#实现选择文件夹对话框

1.前言   在编程时,我们经常需要设置路径,手动录入既慢又容易出错,最好的办法就是通过一个对话框进行选择,这里介绍了一种实现方法。 2.运行图片 3.添加引用 ...
  • QingHeShiJiYuan
  • QingHeShiJiYuan
  • 2015年10月26日 21:49
  • 1095

MFC选择文件夹的对话框

1,目的 提供一个对话框供用户选择一个文件夹路径。 2,原理&实现 先贴上这个工具类的源码: 在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹...
  • dpsying
  • dpsying
  • 2013年12月21日 01:21
  • 24881

弹出文件选择对话框(支持多选)

不多说,贴出代码
  • wwkaven
  • wwkaven
  • 2014年07月03日 09:31
  • 1986

WPF 选择文件和文件夹对话框。

C# WPF 选择文件和选择文件夹对话框,WPF可以直接使用OpenFileDialog来打开文件,但不可以直接使用FolderBrowserDialog来打开文件夹,但可以使用System.Wind...
  • zhumingyan
  • zhumingyan
  • 2016年04月09日 15:03
  • 12159

Qt QFileDialog实现文件选择对话框

目标: 使用Qt开发,能够点击菜单栏-打开文件,多选文件,获取并输出每个文件的路径 环境: 我在Qt项目中已经建立好了菜单栏,并为菜单栏关联好了动作的信号和槽,方法参考:http://blog.cs...
  • v_xchen_v
  • v_xchen_v
  • 2017年05月11日 10:27
  • 2102

QT5 学习之路21---文件对话框

在前面的章节中,我们讨论了 Qt 标准对话框QMessageBox的使用。所谓标准对话框,其实也就是一个普通的对话框。因此,我们同样可以将QDialog所提供的其它特性应用到这种标准对话框上面。今天,...
  • gusgao
  • gusgao
  • 2015年10月05日 17:55
  • 1169

JFileChooser (Java Swing提供的文件选择对话框)

JFileChooser()           构造一个指向用户默认目录的 JFileChooser。 JFileChooser(File currentDirectory)        ...
  • liang5630
  • liang5630
  • 2014年05月12日 20:53
  • 85104

C#之WinForm基础 设置文件对话框一上来的所在的(默认的)目录

慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 1、UI 2、代码 using System; using Sy...
  • yushaopu
  • yushaopu
  • 2016年09月19日 23:35
  • 839
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC 文件对话框 目录选择
举报原因:
原因补充:

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