MFC中CFileDialog类

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 类的构造函数创建对话框的代码中, filters TCHAR 的指针,表示要打开文件的类型。 filters 由两个“字符串对”组成,分别是 Source File(*.txt)|*.txt Source 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 修改属性后的“打开文件”对话框

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值