关闭

Windows编程基础--第14节 MFC之文件对话框CFileDialog

标签: mfcwindows
1813人阅读 评论(0) 收藏 举报
分类:

第14节 MFC之文件对话框CFileDialog


今天我们学习两个打开文件对话框、保存文件对话框,应用程序难免需要加载文件,或者打开配置文件等,这就用到打开或者保存对话框,例如windows文本编辑器中保存对话框就属于其中一种:
这里写图片描述


1. 新建项目

新建一个基于对话框项目“day16”,布局如下,自行处理:
这里写图片描述
拖动一个EDIT到界面,并修改如下属性:

属性 修改值 解释
ID IDC_EDIT_TXT 控件ID
Want Return TRUE 允许回车
Multiline TRUE 允许多行
Horizontal Scoll TRUE 水平滚动天
Vertical Scoll TRUE 垂直滚动条

2. 添加菜单资源

切换到资源视图,添加菜单资源如下:
这里写图片描述
若不知道怎么添加菜单请参考Windows编程基础–第10节 MFC菜单

注意:菜单选项最后加上&符号可以设置快捷键,如“文件(&F)”,当程序运行时可以通过ALT + F快捷打开文件菜单选项;

将菜单绑定到主界面:
这里写图片描述

3. 实现文件打开对话框

右击菜单中“打开”选项,选择“添加事件处理处理程序”,添加处理程序,如图:
这里写图片描述其中行数处理程序名称:OnFileOpen,类列表选择:Cday16Dlg,添加编辑:
函数代码如下:

void Cday16Dlg::OnFileOpen()
{
    // TODO: 在此添加命令处理程序代码
    CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST,_T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"),this);
    dlg.m_ofn.lpstrInitialDir = _T("C:\\");
    if (dlg.DoModal()  == IDOK)
    {
        CStdioFile inFile;
        inFile.Open(dlg.GetPathName(),CFile::modeRead);
        CString text;
        CString temp;
        while(inFile.ReadString(text))
        {    
            GetDlgItemText(IDC_EDIT_TXT,temp);
            if (temp.GetLength() > 0)
            {
                SetDlgItemText(IDC_EDIT_TXT,temp +"\r\n"+ text);
            }
            else
            {
                SetDlgItemText(IDC_EDIT_TXT,text);
            }

        }

        inFile.Close();
    }
}

代码解释:

  1. 创建一个txt文件对话框;
  2. 如文件对话框确定按钮被点击,则打开文件位置,文件全路径就是dlg.GetPathName();
  3. 循环读取文件,知道文件读取结束;每读一行就先获取界面文本框的内容加上新读取的文本,重新设置到界面;
  4. 关闭文件

这样一个打开文件对话框就完成了,效果图如下:
这里写图片描述

3. 实现文件保存对话框

右击菜单中“保存”选项,选择“添加事件处理处理程序”,添加处理程序,如图:
这里写图片描述
名称:OnSaveFile,类列表选择:Cday16Dlg,添加编辑:
函数代码如下

void Cday16Dlg::OnSaveFile()
{
    // TODO: 在此添加命令处理程序代码
    CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST,_T("文本文件(*.txt)|*.txt||"),this);
    if (dlg.DoModal()  == IDOK)
    {
        CFile file;  //建立一个CFile对象
        //打开文件,如果不存在该文件就创建文件
        if(!file.Open(dlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
        {
            AfxMessageBox( "can   not   Create   file! ");
            return;
        } 

        CString output;
        GetDlgItemText(IDC_EDIT_TXT,output);
        file.Write(output,strlen(output));
        file.Flush();    //将在缓冲区中的字符写入文件中
        file.Close();   //关闭文件
        AfxMessageBox( "保存成功!");
    }
}

代码解释:

  1. 创建一个txt文件保存对话框;
  2. 如文件对话框确定按钮被点击,则获取文件位置,文件全路径就是dlg.GetPathName();
  3. 先获取界面文本框的内容,将内容写到文件中;
  4. 关闭文件
    效果图:
    这里写图片描述

好了,这节我们演示了如何创建文件打开和保存对话框,希望对大家有作用,今天就到这了。

项目源码可以访问我的码云

>>>我的私人博客<<<

0
0
查看评论

文件对话框类CFileDialog详解,文件过滤器说明

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 成员变量:            ...
  • masikkk
  • masikkk
  • 2012-07-26 13:56
  • 3054

MFC 文件对话框类CFileDialog

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

MFC——文件打开和保存对话框(CFileDialog)

最近要做一个文件打开和保存的对话框,现将相关的代码记录如下,用以备忘! 所用控件: 2个静态标签(Static Text):用以显示功能标签; 2个文本框(Edit):用以显示打开的文件路径全名要保存的文件路径全名,设置其Read Only属性为true将文本框设置为不可编辑; 2个按钮(Butto...
  • luoweifu
  • luoweifu
  • 2014-04-28 22:42
  • 57123

vs2013 MFC打开文件或文件夹对话框(有图有真相)

vs2013环境要求比vc6.0严格些。以前的代码不能直接拿来用,做了些修改。有效果图。
  • ruanjiayou123
  • ruanjiayou123
  • 2015-09-23 16:58
  • 8756

一个设置问题导致,CFileDialog对话框打开不了

最近一直在做从Perpar3D读取数据,再通过UDP发送的程序,但是在用sprintf_s函数将浮点数,写入到一个字符串时,会发生堆栈溢出,一直没有找到是什么原因。于是程序运行一段时间后就会中断。 在网上找到了一个方法,在属性->连接器->系统->堆栈保留大小中,设置一个比较大的...
  • tuidongzhe
  • tuidongzhe
  • 2017-09-06 23:46
  • 255

Windows编程基础--第3节 初探MFC

前言 win32程序属于早期windows软件,已经逐渐被淘汰,但它的设计模式和方法大部分都被MFC所继承,并且MFC开始使用C++语言进行开发,借助C++比C语言的强大特性,使得开发windws程序更加简便、高效,更加多元化。 创建第一个MFC程序(操作系统:win10 64位 IDE:vc+...
  • qq_25549309
  • qq_25549309
  • 2017-10-19 22:17
  • 1878

MFC中CFileDialog打开和保存文件对话框

     打开/保存文件对话框的程序:          CString   FilePathName;//文件名参数定义     CFi...
  • huixingshao
  • huixingshao
  • 2015-03-12 13:49
  • 1082

MFC CFileDialog使用

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

MFC CFileDialog使用整理

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

Windows编程基础--第13节 MFC之图片控件

这节学习两个控件: 图片控件: Picture Control 1. 新建项目新建一个基于对话框项目“day15”,布局如下,自行处理: 拖动一个Picture Control控件到界面,其实Picture Control就是CStatic 类;设置Picture Control的如下属...
  • qq_25549309
  • qq_25549309
  • 2017-10-31 22:03
  • 1867
    个人资料
    • 访问:40629次
    • 积分:696
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类