关闭

MFC中CFileDialog类

标签: C++CFileDialog类对话框显示对话框属性修改
156人阅读 评论(0) 收藏 举报
分类:

CFileDialog类用来创建“打开文件”对话框或者“另存为”对话框,如图1所示。

 

1 “打开文件对话框

CFileDialog类派生自CCommonDialog类,CCommonDialog类派生自CDialog类。

1 CFileDialog对话框的显示

通过CFileDialog类的构造函数实现对象的创建。

1.1 CFileDialog类的构造函数

CFileDialog类的构造函数格式为

explicit CFileDialog(

    BOOL bOpenFileDialog,  

    LPCTSTR lpszDefExt = NULL,  

    LPCTSTR lpszFileName = NULL,  

    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,  

    LPCTSTR lpszFilter = NULL,  

    CWnd* pParentWnd = NULL,  

    DWORD dwSize = 0,  

    BOOL bVistaStyle = TRUE);

其中,构造函数的参数bOpenFileDialog表示显示的对话框的类型,TRUE表示显示“打开文件”对话框,FALSE表示显示“另存为”对话框;lpszDefExt表示文件的默认扩展名,如果用户不输入扩展名,该扩展名则自动添加在文件名后;lpszFileName表示最初出现在对话框中“文件名(N)”框中的内容;dwFlags是位标志,指定了对话框的属性,默认值OFN_HIDEREADONLY表示将默认方式下出现在对话框中的只读复选框隐藏起来,OFN_OVERWRITEPROMPT表示“另存为”对话框时,如果另存的文件存在,则弹出提示对话框;lpszFilter指向一个字符串,该字符串指定选择的文件类型;pParentWnd表示该对话框的父窗口指针;dwSizeOPENFILENAME结构的大小,该结构包含了创建的对话框的属性;bVistaStyle指定了是否具有Vista类型。

TCHAR filters[] = _T("Source File(*.txt)|*.txt|Source File(*.ini)|*.ini||");
CFileDialog dlg(TRUE, _T("txt"), _T("*.txt"), OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, filters);
if(dlg.DoModal() == IDOK)
{
           m_ctl_source_file.SetWindowTextW(dlg.GetPathName());
}
通过CFileDialog类的构造函数创建对话框的代码中,filtersTCHAR的指针,表示要打开文件的类型。filters由两个“字符串对”组成,分别是Source File(*.txt)|*.txtSource File(*.ini)|*.ini。其中字符串对中的第一个字符串对filter进行了描述,而第二个字符串指定了文件的扩展名。字符串最后用两个’|’表示结束。如图2所示,加红框的位置为filters的两个“字符串对”中第一个字符串,即对filter的描述,当选中某个filter的描述后,只能打开“字符串对”中第二个字符串指定类型的文件。例如,选择Source File(*.txt),则只能打开txt文件,而选择Source File(*.ini)只能打开ini文件。

 

2 filters的作用

CFileDialog类的构造函数的第三个参数对应图3中红框的内容。

 

3 默认文件名

第四个参数中,OFN_FILEMUSTEXIST要求对话框检测用户输入的文件名,如果文件不存在,则拒绝文件名OFN_HIDEREADONLY的作用之前已经讲过;第五个参数表示要打开文件的类型。

通过CFileDialog类的对象dlg调用DoModal()函数显示对话框。当按下了图1显示的对话框中的“打开(O)”按键后,DoModal()函数返回值是IDOK

1.2 显示在“打开文件”对话框中选定的文件的绝对路径

m_ctl_source_file是编辑框控件的对象,该编辑框用来显示在“打开文件”对话框中选定的文件的绝对路径。GetPathName()函数是CFileDialog类的成员函数,该函数的作用是返回选中对话框的绝对路径。除了GetPathName()函数外,CFileDialog类的GetFileName()函数返回带后缀名的文件名,而GetFileTitle()函数返回不带后缀名的文件名。

2 CFileDialog对话框属性的修改

MFCCFileDialog类封装了OPENFILENAME结构和两个Windows API函数- GetOpenFileName()GetSaveFileName()OPENFILENAME结构中包含了要显示的对话框的属性,GetOpenFileName()函数用来显示“打开文件”对话框,GetSaveFileName()函数用来显示“另存为”对话框。

1.1 CFileDialog类的构造函数”,CFileDialog构造对话框时,该类构造函数将用来定义对话框窗口标题、初始目录和其它参数的值填充在OPENFILENAME结构的相应域中。随后将结构的地址传递给GetOpenFileName()函数或GetSaveFileName()函数。用来初始化结构的值中,一些来自CFileDialog类的构造函数的参数表,其它则是适用于大多数应用程序的默认值。

可以在调用CFileDialog类的构造函数创建该类的对象之后,而在调用DoModal()函数显示对话框之前,修改OPENFILENAME结构中的相应成员变量,来修改对话框的属性。

CFileDialog类的成员变量m_ofnOPENFILENAME结构的变量。在该结构中,lpstrFileTitle表示对话框的标题,lpstrInitialDir表示“打开文件”对话框最开始显示的文件夹。

dlg.m_ofn.lpstrTitle = _T("请选择要打开的文件!");
dlg.m_ofn.lpstrInitialDir = _T("D:\\文件");
以上代码将“打开文件”对话框的标题设置为“请选择要打开的文件”,对话框最开始显示的文件夹是D盘根目录下名为“文件”的文件夹中的内容,如图4所示。

 

4 修改属性后的“打开文件”对话框

0
0
查看评论

CFileDialog文件选择对话框的使用与定义

在CommDlg.h中有如下定义,在不使用MFC时,可以用该结构体的对象设置打开文件对话框属性,再配合GetOpenFileName(OPENFILENAMEA &of)函数实现打开文件。 typedef struct tagOFNA { DWORD lStructSi...
  • lctm2005
  • lctm2005
  • 2011-04-03 13:23
  • 1992

MFC CFileDialog使用整理

MFC CFileDialog使用整理 1、CFileDialog构造函数 CFileDialog:CFileDialog(BOOL     bOpenFileDialog,  LPCTSTR  ...
  • penpenandtongtong
  • penpenandtongtong
  • 2012-08-06 13:45
  • 5341

MFC中CFileDialog的用法 如何设置文件类型

CFileDialog::CFileDialog CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, ...
  • u013174689
  • u013174689
  • 2014-06-29 09:01
  • 1547

MFC CFileDialog使用

昨天,TG说要写一个保存图片的操作。虽然Halcon里提供了保存图片的函数write_image(Image : : Format, FillColor, FileName : )  但是仅依靠这个函数是无法实现界面友好的。因此要做出一个具有windows风格的保存操作,还是得使用MF...
  • pengjc2001
  • pengjc2001
  • 2016-08-27 09:26
  • 844

MFC 文件对话框类CFileDialog

文件对话框分为打开文件对话框和保存文件对话框。打开文件对话框用于选择打开的文件的路径,保存文件对话框用来选择要保存问价的路径。 CFileDialog类的构造函数原型如下: explicit CFileDialog(    BOOL bOpenFileDialog, &#...
  • yzl20092856
  • yzl20092856
  • 2016-02-19 12:59
  • 768

【框架-MFC】关于CFileDialog保存文件获取扩展名(后缀名)

方法1、通过CFileDialog.m_ofn.nFilterIndex过滤器编号来区分当前选择的扩展名 CFileDialog fileDialog(FALSE, NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\ _T("DataFil...
  • chenlu5201314
  • chenlu5201314
  • 2016-11-07 15:49
  • 1097

MFC如何用CFileDialog来打开和保存文件

CFileDialog 文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = ...
  • flyingleo1981
  • flyingleo1981
  • 2012-11-08 18:33
  • 1346

使用MFC的CFileDialog实现选择多个文件

CFileDialog openDlg( TRUE, /*bOpenFileDialog为TRUE时为打开文件,为FALSE时为保存文件*/ NULL, NULL, OFN_ALLOWMULTISELECT, /*dwFlags为OFN_ALL...
  • aafengyuan
  • aafengyuan
  • 2012-03-23 11:32
  • 5558

如何用CFileDialog得到一个文件夹的路径?

今晚突发奇想想做一个类似widows的搜索文件小程序,在http://topic.csdn.net/t/20041027/15/3496061.html发现一段经典代码 特记录如下,以备不时只需。 code: void CFindFileDlg::OnButton1() ...
  • xufuyuan
  • xufuyuan
  • 2015-03-24 23:54
  • 1706

MFC中关于文件的读取和存储(使用CFile与CFileDialog类)

在这里我记录一下如何读取和存储一个文件!     这里以读取一个txt文档为例。     我首先建立了一个单文档应用程序,在View处理LBUTTONDOWN的消息,即左鼠标键按下,打开一个文件。当然这里是为了图方便省事!    ...
  • lishuhuakai
  • lishuhuakai
  • 2014-01-10 23:07
  • 7327
    个人资料
    • 访问:59138次
    • 积分:2347
    • 等级:
    • 排名:第18819名
    • 原创:183篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论