文档的读写与打开方式及视图

对话框

模态对话框:用户在打开一个对话框如“打开文件”对话框后,在退出此对话框时无法在程序的其他地方工作。

非模态对话框:则可以。

对话数据交换和确认函数DDXDDV

 

文档与视图

文档对象容纳数据,而视图对象显示这些数据并允许编辑。

文档与视图的五个重要的成员函数:

CView::GetDocument():从视图得到与之相关联的文档。

CDocument::UpdateAllViews():当文档的数据发生改变时,通知(通过OnUpdate()函数)所有的视图更新所显示的数据。

CView::OnUpdate():当应用程序调用CDocument::UpdateAllViews()函数时,相应地调用该函数。

CView::OnInitialUpdate():程序启动时,或用户从File菜单选择NewOpen时,便会调用此函数。如果视图类映射了OnCreate()函数,应用程序启动时调用OnCreate()之后立即调用OnInitialUpdate()OnCreate()只调用一次,OnInitialUpdate()可调用多次。

CView::OnNewDocument():首次构造文档对象之后,且当用户从SDI应用程序的File菜单选择New的时候,调用此虚函数。在此函数内可设置文档数据成员的初始值。

 

文档的读写

序列化(Serialization:在程序退出时将对象保存到磁盘,可以程序重新启动时恢复它们。这个保存和恢复的过程称为序列化。但在MFC库中,不能使用序列化来替代数据库管理系统,虽然所有与文档有联系的对象都可以从一个磁盘文件中顺序读取,但不能随机访问磁盘文件中的对象。

注意:有一个称为结构化存储的可适应顺序文件和数据库。MFC框架就已经使用结构化存储,支持嵌入对象的包容器程序。

永久保存 (Persistence):保存应用程序的各种信息。

CArchive:为序列化提供一个上下文。CArchive可以看成文档与磁盘文件之间的媒介,构造Archive对象时,将一个CFile对象与其连接在一起;Serailize()函数以CArchive的引用为参数,程序开发人员只要完成对Archive的序列化操作,与磁盘之间的交换由Archive去完成。一个CArchive对象可以写或读数据,但不能同时读写。

CFile:代表存储在磁盘介质上的文件,直接支持非缓冲文件和二进制文件读写,其派生类支持文本文件和内存文件。当有读写命令时,应用程序框架打开文件并完成CFileCArchive对象的连接,然后将CArchive对象的引用作为参数传给CDocument::Serialize(),所以在AppWizard产生的代码中甚至看不到CFile对象。

 

序列化的过程如下:

图:序列化过程

我们要做的就是在Serialize()中,将数据存到归档对象中,或者从归档对象中取出。在File OpenFile Save过程中,应用程序框架调用文档的Serialize()函数。

 

文件扩展名及打开方式

双击打开

在第一次运行AppWizard时,在第四步对话框中单击Adavanced按钮,在对话框左上方控件中输入文件名的扩展名。这样可以确保文档模板资源字符串包含正确的默认文件扩展名,并在应用程序类的InitInstance()中插入与资源管理器有关的代码,使用户可以双击文档图标来运行打开文档的程序(exe)。

       //Enable DDE Execute open

       EnableShellOpen();

       RegisterShellFileTypes(TRUE);

如果在AppWizard中为做设置,可以在WorkSpace中选择Resource View页面,打开String Table资源,选择IDIDR_MAINFRAME的字符串,双击它,打开String Properties对话框,在Caption编辑框中显示类似的下列信息:

标题栏My16b/n我的无标题/nMy16b/n/n.17a/nMy16b.Document/n 17a Document

每个字符串由/n分隔,/n后无字符串标识字符串为空。七个字符串的含义如下:

标题栏My16b应用程序主窗口标题栏显示内容,仅SDI需要

/n我的无标题文档名,作为新建文档的缺省名。如此串为空,使新文档窗口标题栏显示”无标题”

/nMy16b只与MDI有关,当有多个文档模板时,作为文档模板名

/nnull 显示在文件对话框文件类型列表框中的信息如文件 (* .17a )

/n .17a 缺省的文件后缀,如“* .17a

/nMy16b.Document注册表中使用的文件类型子项名

/n 17a Document注册表中使用的文件类型名

其中第四、五个字符串与文件类型有关。对第四个字符串资源修改为行尾的字符串 17a 后,打开文件对话框会自动显示文件类型*. 17a

拖放打开

在应用程序类的InitInstance()中插入与资源管理器有关的代码,使用户可以拖放文档图标到以运行的程序(exe)来打开文档。

       //Enable drag/drop open

       m_pMainWnd->DragAcceptFiles();

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值