`
wsql
  • 浏览: 11958984 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

MFC如何生成一个可串行化的类

 
阅读更多

一、MFC允许对象在程序运行的整个过程中持久化的串行化机制

(1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程。

(2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构)的状态。

(3)MFC支持CObject类中的串行化,所以,所有继承于CObject的类可以利用CObject的串行化协议。

(4)串行化的基本思想:

a、对象必须能将其当前状态写入到持久化存储媒介中,通常用其成员变量实现。

b、对象可以通过读或反序列化从存储媒介中重新构造对象的状态。

c、串行化处理所有对象指针的细节,以及序列化对象时对对象的循环引用。

d、关键点是对象自己负责读和写其本身的状态,所以,序列化一个对象时,必须是想基本的序列化操作。

(5)MFC使用CArchive类的对象作为被序列化的对象和存储媒介之间的中间媒介。

二、生成一个可串行化的类的步骤

(1) Derive your class from CObject. (定义一个基类为CObject的类)

(2) Override the Serialize member function.(重写串行化函数)

(3) Use the DECLARE_SERIAL macro in the class declaration.(在类声明文件中使用DECLARE_SERIAL宏)

(4) Define a constructor with no arguments (a default constructor).(定义一个无参数的构造函数)

(5) Use the IMPLEMENT_SERIAL macro in the class implementation file.(在实现文件中使用IMPLEMENT_SERIAL宏)

三、实例

Graph.h文件:

  1. #pragmaonce
  2. //Graph命令目标
  3. classGraph:publicCObject//(1)定义一个基类为COject的类
  4. {
  5. DECLARE_SERIAL(Graph)//(3)在类声明文件中使用DECLARE_SERIAL宏
  6. public:
  7. Graph();//(4)定义一个无参数的构造函数
  8. Graph(intdrawType,CPointptOld);
  9. virtual~Graph();
  10. voidSerialize(CArchive&ar);//(2)重写串行化函数
  11. private:
  12. intm_drawType;
  13. CPointm_ptOld;
  14. };

Graph.cpp文件:

  1. //Graph.cpp:实现文件
  2. //
  3. #include"stdafx.h"
  4. #include"Archive.h"
  5. #include"Graph.h"
  6. //Graph
  7. IMPLEMENT_SERIAL(Graph,CObject,1)//(5)在实现文件中使用IMPLEMENT_SERIAL宏
  8. Graph::Graph()//(4)定义一个无参数的构造函数
  9. {
  10. }
  11. Graph::Graph(intdrawType,CPointptOld)
  12. {
  13. this->m_drawType=drawType;
  14. this->m_ptOld=ptOld;
  15. }
  16. Graph::~Graph()
  17. {
  18. }
  19. //Graph成员函数
  20. voidGraph::Serialize(CArchive&ar)//(2)重写串行化函数
  21. {
  22. if(ar.IsStoring())
  23. {
  24. ar<<m_drawType<<m_ptOld;
  25. }
  26. else
  27. {
  28. ar>>m_drawType>>m_ptOld;
  29. }
  30. }

原博客:http://blog.csdn.net/candyliuxj/article/details/6782172

分享到:
评论

相关推荐

    MFC 简单Modbus RTU.zip_MFC Modbus_MFC modbus RTU_MFCmodbus_mfc vs2

    在这个"MFC简单Modbus RTU"项目中,开发者使用Visual Studio 2013中的MFC库创建了一个简单的应用,实现了Modbus RTU协议的功能,主要用于控制继电器的开和关操作。这是一个基础的单命令控制Demo,可以帮助初学者理解...

    基于MFC实现Modbus模拟主站

    在本项目中,开发者使用MFC框架来实现一个Modbus模拟主站。主站通常是系统中的控制设备,负责发起请求并接收从站(如PLC)的响应。模拟主站意味着程序可以模拟实际主站的功能,用于测试、调试或教学目的。 实现步骤...

    MFC 学生健康管理系统

    1. 基础类:如CObject,是所有MFC类的基类,提供了诸如串行化、动态创建等基础功能。 2. Windows消息处理:通过消息映射机制,简化了窗口类与消息的关联。 3. 对话框和控件:提供了丰富的对话框和控件类,如CDialog...

    MFC界面编写

    12. **串行化**:MFC的CDocument类支持数据的串行化,可以将文档内容保存到磁盘,并在以后的运行中加载。 学习和掌握MFC界面编写不仅需要理解Windows编程的基本概念,还需要对C++和面向对象编程有深入理解。通过...

    VS2013 MFC 编程基础(19个专题) .rar_MFC 界面_MFC编程_VS2013_mfc界面编程_pigml4

    这将为你生成一个基本的MFC框架,包括必要的头文件、源文件和资源文件。 3. **文档/视图架构** MFC中的“文档/视图”架构是一种设计模式,用于分离数据(文档)和显示数据(视图)。文档类存储数据,视图类负责...

    深入浅出MFC--侯捷 深入浅出MFC--侯捷 深入浅出MFC--侯捷

    7. **串行化(Serialization)**:MFC的串行化机制使得文档类能够将数据保存到磁盘并重新加载,这对于持久化数据存储非常重要。 8. **网络和数据库支持**:MFC提供了对TCP/IP网络编程的支持,同时也封装了ODBC...

    MFC创建过程

    MFC还提供了丰富的类库,如串行化支持、数据库访问(ODBC和ADO)、网络编程等,帮助开发者快速构建功能丰富的Windows应用程序。 总之,MFC创建过程是一个涉及类的继承、消息处理、用户界面构建等多个方面的学习过程...

    深入浅出MFC 源码 侯俊杰 包含第二版所有源码

    7. **串行化**:MFC提供了串行化机制,通过CSerializable类支持对象的序列化和反序列化,使得数据可以在磁盘和内存之间交换。 8. **数据库支持**:MFC通过ODBC(Open Database Connectivity)类提供数据库访问,如...

    MFC入门资料

    8. **串行化**:MFC通过CSerializble类和Serialize函数实现了对象的串行化,用于保存和恢复对象的状态,常用于文件存储或网络传输。 9. **异常处理**:MFC提供了CException类作为异常处理的基础,通过try、catch...

    学习MFC相关知识点.zip

    8. **串行化**:MFC的CObject类支持串行化,使得对象可以被序列化到文件或内存,方便数据持久化。 9. **异常处理**:MFC提供了CException类,用于异常处理,使得程序可以优雅地处理错误情况。 10. **国际化和本地...

    visual C++中 MFC与控件

    MFC类的组织结构包括根类CObject,它是所有类的基础,提供了对象创建、销毁、运行时信息、对象串行化等功能。CWinApp类代表应用程序本身,负责应用程序的初始化、运行和结束。CCmdTarget类作为消息映射的基类,处理...

    MFC类库详解中文版.zip

    7. **串行化支持(Serialization Support)**:通过继承CObject类,可以实现对象的串行化,将对象的状态保存到文件或内存中,以便后续恢复。 8. **动态链接库(Dynamic Link Library,DLL)支持**:MFC提供了一些类...

    VC6 C++ MFC编程实例 pdf 版

    《VC6 C++ MFC编程实例》是一本面向初学者的指南,主要涵盖了使用Microsoft Visual C++ 6.0(简称VC6)进行MFC(Microsoft ...书中的每个实例都是一个独立的学习单元,帮助读者逐步构建起完整的MFC应用程序开发技能。

    mfc类库详解 visual c++ 6.0的mfc类库详解 vc 6 visual c

    7. **串行化**:MFC的CObject类支持串行化,允许对象的数据保存到文件或从文件中加载,这对于数据持久化非常有用。 8. **数据库支持**:MFC包含了ADO(ActiveX Data Objects)和DAO(Data Access Objects)两种...

    MFC从入门到精通.rar

    1. **MFC应用程序向导**:这是创建新MFC项目的起点,它会生成一个包含基本结构的项目模板,包括主框架窗口、文档类、视图类等。 2. **对话框编程**:MFC提供了用于创建和管理对话框的类,如CDialog,通过资源编辑器...

    MFC Windows程序设计(第2版修订版)--源代码

    一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格...

    vc-mfc程序-与PLC串口进行通讯-电机控制-多线程-界面全屏化

    在本文中,我们将深入探讨如何使用VC++ MFC(Microsoft Foundation Classes)库开发一个与PLC(Programmable Logic Controller)进行串行通信的程序,实现电机控制,并且利用多线程技术和界面全屏化来优化用户体验。...

    用MFC开发Windows应用程序1

    - **根类(CObject)**:所有MFC类的基类,提供了诸如对象管理、串行化等功能。 - **应用程序体系结构类**:如CCmdTarget,用于构建应用程序框架,包含命令处理、文档/视图模型等。 - **可视对象类**:如CWnd、...

    串口接收的MFC程序

    《串口接收的MFC程序》是一个基于Microsoft Foundation Class (MFC)库开发的应用程序,设计用于实现串行通信中的数据接收功能。在本文中,我们将深入探讨串口通信、MFC框架以及如何利用该程序接收GPS信息。 串口...

    一份很实用的MFC资料

    1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API创建控制条 22 2.3 用MFC创建控制条 24 2.3.1 CToolBarCtrl和...

Global site tag (gtag.js) - Google Analytics