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

第十六章、读和写文档

知识点:

序列化流程

持续文档对象

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对象中。

你可能感兴趣的:(.net,框架,File,文档,mfc,vc++)