MFC中CFileDialog类

原创 2017年09月06日 21:07:32

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 修改属性后的“打开文件”对话框

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mfc-CFileDialog类

CFileDialog* dlg = new CFileDialog(TRUE,"(*.*)|*.*",NULL,4|2,"任意文件(*.*)|*.*||"); //新建CFileDialog对象 d...

MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile

一,使用CFileDialog文件对话框 二,使用CArchive和CFile对文件进行读写操作 三,使用CStdioFile实现简单字符串文件操作 四,使用CArchive和CObject.Seri...

MFC CFileDialog 的个性化(VS2013)

本文是为标准的文件选择对话框添加控件以扩展它的功能。我做的是预览图片。为了做到这点,要把CFileDialog类派生.添加一个对话框资源,这里所用工具是VS2013 1.切换到资源视图,添加一个对话...

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

CFileDialog openDlg( TRUE, /*bOpenFileDialog为TRUE时为打开文件,为FALSE时为保存文件*/ NULL, NULL, ...

[MFC]公用对话框介绍、CFileDialog

1. 公用对话框:     1) 在使用Windows时有些对话框可能用得太频繁了,以至于并不是所有应用程序都愿意重复开发这些使用如此频繁的对话框,像打开文件的对话框、设置字体的对话框等等;     ...

MFC之文件的操作(CFileDialog,CFile)

CFileDialog()这个函数用来打开一个打开文件的对话框 直接CFileDialog fd (TRUE)就可以,并调用fd.DoModal()就能执行 如果要对文件类型做规定,那么就要去指定...

C++ 学习使用 MFC CFileDialog

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

MFC打开/保存文件对话框:CFileDialog

CFileDialog 文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:  CFileDialog::CFileDialog( BOOL bOpenFileDia...

MFC中CFileDialog用法

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPC...

MFC之CFileDialog文件保存扩展名问题

void CmapfileDlg::OnBnClickedNew2() {  static char BASED_CODE szFilter[] = "Map Files (*.map)|...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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