深入浅出MFC文档/视图架构之相互关系

本文深入探讨MFC的文档/视图架构,总结了文档、视图、框架之间的关系,以及消息流动机制。通过实例展示了类之间的相互访问函数和消息处理顺序,揭示了在MFC程序中,用户消息首先由视图处理,未处理则传递至框架窗口,甚至可能涉及文档和应用程序的处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、模板、文档、视图、框架的关系

  连载1~5我们各个击破地讲解了文档、文档模板、视图和框架类,连载1已经强调这些类有着亲密的内部联系,总结1~5我们可以概括其联系为:

  (1)文档保留该文档的视图列表和指向创建该文档的文档模板的指针;文档至少有一个相关联的视图,而视图只能与一个文档相关联。

  (2)视图保留指向其文档的指针,并被包含在其父框架窗口中;

  (3)文档框架窗口(即包含视图的MDI子窗口)保留指向其当前活动视图的指针;

  (4)文档模板保留其已打开文档的列表,维护框架窗口、文档及视图的映射;

  (5)应用程序保留其文档模板的列表。

  我们可以通过一组函数让这些类之间相互可访问,表6-1给出这些函数。

  表6-1 文档、文档模板、视图和框架类的互相访问

从该对象 如何访问其他对象
全局函数 调用全局函数AfxGetApp可以得到CWinApp应用类指针
应用 AfxGetApp()->m_pMainWnd为框架窗口指针;用CWinApp::GetFirstDocTemplatePostion、CWinApp::GetNextDocTemplate来遍历所有文档模板
文档 调用CDocument::GetFirstViewPosition,CDocument::GetNextView来遍历所有和文档关联的视图;调用CDocument:: GetDocTemplate 获取文档模板指针
文档模板 调用CDocTemplate::GetFirstDocPosition、CDocTemplate::GetNextDoc来遍历所有对应文档
视图 调用CView::GetDocument 得到对应的文档指针; 调用CView::GetParentFrame 获取框架窗口
文档框架窗口 调用CFrameWnd::GetActiveView 获取当前得到当前活动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值