VC++.NET 技术内幕学习四

原创 2012年03月31日 13:30:08

第十六章、读和写文档

知识点:

序列化流程

持续文档对象

Serialize

CArchive归档对象

CFile对象

磁盘

你在Serialize函数中需要做的就是,将数据存到归档对象中或从归档对象中取出。在打开或保存的处理过程中,应用程序框架会调用文档的Serialize函数。

         可序列化的类必须直接或间接地从CObject派生而来,并且在类声明中,必须包含DECLARE_SERIAL宏调用,在类的实现文件中,必须包含IMPLEMENT_SERIAL宏调用。

 

在String Table中可以通过编辑IDR_MAINFRAME来做到在底层修改窗口标题,好像也可以通过它修改菜单名等,有待验证。

 

 

MFC应用程序启动步骤:

1、Windows将程序载入内存。

2、构造全局对象theApp(当程序被载入时,所有全局对象都会立刻被创建)

3、Windows调用全局函数WinMain,它是MFC库的一部分。(WinMain是主程序的入口点)

4、WinMain自动搜索CWinApp派生类的唯一实例。

5、WinMain调用theApp的InitInstance函数,该函数在派生应用程序类中被改写。

6、被改写的InitInstance函数启动文档的载入以及主框架和视图窗口的显示处理过程。

7、WinMain调用theApp的Run成员函数,启动窗口消息和命令消息的分发处理过程。

 

 

创建空文档:CWinApp:: OnFileNew函数

应用程序类的InitInstance函数在调用了AddDocTemplate之后,会调用另一个非常重要的CWinApp成员函数OnFileNew(通过CWinApp::ProcessShellCommand间接调用)。

 

CWinApp::OnFileNew完成以下工作(通过应用程序框架间接调用)

1、构造文档对象,但并不从磁盘中读数据。

2、构造主框架对象(即类CMainFrame的对象),并创建主框架窗口,但并不对它进行显示。主框架窗口包括IDR_MAINFRAME菜单、工具栏和状态栏。

3、构造视图对象,并创建视图窗口,但并不对它进行显示。

4、建立文档、主框架和视图对象之间的相互连接。不要把这些对象之间的连接同通过调用AddDocTemplate所建立的类之间的连接混淆起来。

5、调用文档对象的CDocument::OnNewDocument虚成员函数。它会调用DeleteContents虚函数。

6、调用视图对象的CView::OnInitialUpdate虚成员函数

7、调用框架对象的CFrameWnd::ActivateFrame虚成员函数,以便显示出具有菜单、视图窗口和控制栏的主框架窗口。

 

         File | New和File | Open菜单命令被映射到了应用程序类的成员函数上,而File | Save和File | Save As则被映射到了文档类的成员函数上(CDocument::OnFileSave)。File | New被映射到了OnFileNew,而SDI应用程序中的InitInstance函数调用的也是OnFileNew(间接)。当应用程序框架调用InitInstance函数时,文档对象还未创建,因此,OnFileNew不可能是CDocument的成员函数。

 

         在SDI应用程序中,CMainFrame对象不但构成了应用程序的框架,还包含了视图对象;而在MDI应用程序中,这两部分是分开的。CMainFrame对象是在InitInstance函数中被显示创建的,而视图则包含在CChildFrame对象中。

VC++.NET 技术内幕学习三

第十五章、文档与视图的分离 CView::GetDocument();非虚函数。返回的是指向文档的指针。 当MFC产生CView的派生类时,它同时也创建类型安全的GetDocument函数,该函数...

VC++.NET技术内幕学习一

第五章消息映射 遇到的问题: 一、映射模式。 坐标使用的经验规则: 1、  可以认为CDC的所有成员函数都以逻辑坐标作为其参数。 2、  可以认为CWnd的成员函数都以设备坐标作为其参数。 ...

vc++.net技术内幕

  • 2013年03月25日 17:09
  • 35.54MB
  • 下载

VC++.net 技术内幕6 源码 part11

  • 2008年08月20日 17:58
  • 977KB
  • 下载

VC++技术内幕』学习笔记(10)

第十篇:模式对话框和通用控件(下)     大家好,雷神由于出差在外,所以笔记今天才写出抱歉。不知道大家有没有做上篇提到的计算器,计算器对雷神来说可是经典的程序,学VB先搞了计算器,学VC也搞了...

VC++.net 技术内幕6 源码part9

  • 2008年08月20日 17:50
  • 977KB
  • 下载

VC++.net 技术内幕6 源码 part3

  • 2008年08月20日 17:27
  • 977KB
  • 下载

VC++调用webservice (不使用.NET的托管技术)

正在看着AV(AreCont)SDK的时候,老大突然让我转到soap上,原因是刚进公司的我,第一项任务便是研究ONVIF(so many specifications),当然主要的还是看core ...

VC++.net 技术内幕6 源码 part8

  • 2008年08月20日 17:39
  • 977KB
  • 下载

VC++.net 技术内幕6 源码 part7

  • 2008年08月20日 17:34
  • 977KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++.NET 技术内幕学习四
举报原因:
原因补充:

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