MFC(文档类)

MFC中,文档类负责数据处理,视图类负责显示和交互。在创建视图时,通过CCreateText结构,文档和视图形成绑定。视图的ON_CREATE消息处理函数中,保存了文档对象的地址,建立链表关系。一个文档对象可以有多个视图,但一个视图只对应一个文档。交互过程包括:文档修改数据并通知视图更新,视图响应消息显示更新数据,反之亦然。
摘要由CSDN通过智能技术生成

文档类对象和视图对象的绑定

对于单文档结构而言,文档负责处理数据,而视图类负责显示和交互,那么视图和文档类必须形成绑定关系才行,这种绑定关系是在创建视图类窗口的时候就会形成的,MFC内部在创建视图的时候会要求我们传入一个CCreateText结构,该结构里面包含了一个m_pNewViewClass和m_pCurrentDoc,m_pNewViewClass变量保存的是你要创建的视图类的静态变量CRuntimeClass的地址,m_pCurrentDoc保存的是文档类对象的地址(还有m_pLastView,m_pCurrentFrame两个成员,是用于共享视图或者框架使用的)。
创建视图窗口成功后,视图类对象响应ON_CREATE消息的处理函数,并且把创建视图窗口的所有参数传递给该函数,其中就包括CCreateText结构,这样在内部就可以拿到文档对象和视图静态变量的地址,然后就可以将该地址保存到文档类对象的一个链表里面,让文档对象和新创建的视图类对象建立绑定关系

由于文档类对象保存视图类静态变量地址的是链表,而类对象内部有一个参数保存文档对象的只是一个参数,所以一个文档对象可以保存多个视图类对象,但是一个类对象只能对应一个文档对象。

以下代码只是说明创建视图时和文档类绑定的过程,不是真正的代码,省略了很多内容。

CMyFrameWnd* pFrame = new CMyFrameWnd;
CMyDoc* pDoc = new CMyDoc;

CCreateContext cct;
cct.m_pCurrentDoc = pDoc;//文档类对象地址
cct.m_pNewViewClass = RUNTIME_CLASS(CMyView);//&CMyView::classCMyView

pFrame->LoadFrame(... &cct)//函数内部this为pFrame
{
   
  Create(...,&cct)//函数内部this为pFrame
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值