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类的构造函数创建对话框的代码中,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 修改属性后的“打开文件”对话框

阅读更多

扫码向博主提问

去开通我的Chat快问

hou09tian

非学,无以致疑;非问,无以广识
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/77871429
个人分类: MFC编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭