序列化:
即对象可以被持续。意即当程序退出时,文档被存在磁盘上,当程序重启时又可以恢复。对象的这种存盘和恢复的过程即称为序列化。
磁盘文件和归档:
Serialize函数对数据进行的读和写:在MFC中,磁盘文件是通过CFile类的对象来表示,CFile类对通过Win32函数CreateFile所获得的二进制文件句柄进行了封装。该文件句柄和通过调用C运行库fopen函数所获得的带缓冲区的FILE指针有所不同,它是一个二进制文件的句柄,应用程序框架借助于该文件句柄来调用win32函数ReadFile、WriteFile、SetfilePointer。如果应用程序不直接利用磁盘I/O,而只依赖于序列化处理过程,那么可以避免直接使用CFile对象。在Serialize函数和CFile对象之间,还有一个归档对象(CArchive类对象)。该归档对象为CFile对象缓存数据,它同时还保存一个内部标记,用来标识归档是存入还是载入。在FileOPen和FileSave的处理过程中会调用文档的Serialize函数。
可序列化的类必须直接或间接地从CObject派生而来,并在声明中必须包含DECLARE_SERIAL宏调用,在类的实现文件中,必须包含IMPLEMENT_SERIAL宏调用。
大多数序列化函数都需要调用基类的Serialize函数。
从归档中载入-内嵌对象和指针:
对于CObjecf 派生类的内嵌对象总是直接调用 Serialize()。
从Explorer启动和拖放(双击文档能运行某个程序来打开):
在 InitInstance() 里调用
RegisterShellFileType(TRUE) ;
在注册表里会加入两个条目:
HKEY_CLASSES_ROOT顶层键下,新加入一个子键和一个数据字符串。
在文档上双击:
InitInstance() 里的 EnableShellOpen() ;
它支持通过DDE消息执行程序。
允许拖放:
应用程序对象的公有数据成员m_pMainWnd指针指向CFrameWnd(或CMDIFrameWnd)对象。当把一个文件拖到框架窗口里的任何地方时,都会激发对CFrameWnd::OnDropFiles 的调用。AppWizard 在 InitInstance() 里产生一行代码,使拖放可以工作:
m_pMainWnd->DragAcceptFiles() ;
程序启动参数:
InitInstance() 函数调用 ParseCommandLine 和 ProcessShellCommand() 函数以处理命令行。如果命令行包含一些看起来像文件名一样的字符,程序会马上装入该文件。因此可以建立一个Windows快捷方式以用指定的文档文件运行程序。
本文介绍了MFC中的序列化概念及其实现方法,包括序列化的基本原理、磁盘文件与归档对象的作用,以及如何实现类的序列化。此外还探讨了通过注册表实现程序与文件类型的关联,以及如何通过拖放操作启动程序。
2450

被折叠的 条评论
为什么被折叠?



