第7讲-MFC程序中的文档视结构.pptVIP

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7讲-MFC程序中的文档视结构

* 切分窗口:CSplitterWnd 单个视图类的动态切分: AppWizard中Step4中Advanced Options MainFrame::OnCreateClient 多个视图类的静态切分: AppWizard中Step4中Advanced Options 建立一个新View类 MainFrame::OnCreateClient中显示两个视窗口;两个视窗口与同一个文档对象相连 * 由程序命令切换视图类 在应用程序启动构造一个视图类对象,创建视图窗口并显示 视图切换时: 如视图类对象未构造:构造、创建一个窗口并加入到文档类管理的一个视列表中 将该视图窗口作为当前的视图窗口并显示 原视图窗口不显示 需要进行一些状态保存设置工作 程序运行时打开或新建文档SDI或MDI一样,视图只与文档有关 视图的销毁由文档类对象完成 * 多文档类型模板结构 建立了应用类、文档类、视图类、框架窗口类之间的关系:通过文档模板,我们可以知道在创建或打开一个文档时,需要用什么样的视图、框架窗口来显示它。 对象的动态构造解决类用户复杂的编程:这是因为文档模板保存了文档和对应的视图和框架窗口的CRuntimeClass对象的指针 每个从CObject中派生的类都有一个 CRuntimeClass对象同它关联以完成在运行时得到类实例的信息或者是它的基类 * 如果应用程序需要处理多种类型的文档,并且何时打开何种文档均需程序员手工控制,此时,程序员必须对文档模板进行编程。 如何根据自己的要求来选择文档模板,及相应的视和文档。 分别建立两套文档模板,分别对应着两套文档模板资源,两套框架窗口,两套文档和两套视,分别用于两种不同数据的存放和显示。程序可以根据用户选择的文件名来分别处理这两种数据。 * 添加新文档的步骤: 创建新的文档类和视图类 创建一个文档菜单 创建文档菜单对应的字符串表 在CWinApp::InitInstance()中注册新的文档模板 * 应用程序、文档模板、文档、框架窗口及视窗对象间的关系 : CWinApp CDocTemplate CDocument CFrameWnd CView * 每个应用程序可以有多个文档模板,标示不同的文档类型 新建文档模板对象 加入到应用程序框架中:AddDocTemplate() 以后新建文档时将可选择地建立某一类型的文档 打开文档时应用程序框架将根据文档信息用某一文档类型的模板打开 * MDI应用程序可以处理多个文档类型,即多个文档模板;每个模板又可以有多个文档;每个文档又可以多视显示。为管理方便,上一级往往保留了下一级的指针列表。 每个应用程序对象保存了文档模板对象 每个文档模板对象保存了使用该文档模板创建的活动的文档对象 每个文档对象保存了一个视列表 * MDI中的指针列表 … … … … … … … 应用程序对象 文档模板 1 文档 11 视1 视n 文档 1n 视1 视n 文档模板 n 文档 n1 视1 视n 文档 nn 视1 视n * 每个应用程序类(CWinApp的派生类)都保留并维护了一份所有文档模板的指针列表,这是一个链表结构: 应用程序为所要支持的每个文档类型动态分配一个CMultiDocTemplate GetFirstDocTemplatePostion获得应用程序注册的第一个文档模板的位置 GetNextDocTemplate函数获得下一个CDocTemplate对象指针 通过这两个函数,应用程序可以遍历整个文档模板列表;如果被检索的文档模板是模板列表中的最后一个,则pos参数被置为NULL * 一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针列表: 应用程序可以用GetFirstDocPosition函数获得与文档模板相关的文档集合中第一个文档的位置 并用POSITION值作为GetNextDoc的参数来重复遍历与模板相关的文档列表 如果列表为空,则pos被置为NULL * 一个文档可以有多个视。每一个文档都保留并维护一个所有相关视的列表: GetFirstViewPosition返回与调用文档相联系的视的列表中的第一个视的位置 GetNextView返回指定位置的视,并将rPositon的值置为列表中下一个视的POSITION值 如果找到的视为列表中的最后一个视,则将rPosition置为NULL. * 各程序框架中类之间的存取关系 (1) (5) (4) (6) (7) (9) (8) (10) (3) CWinApp CMultiDocTemplate CDocument CView CMDIFrameWnd CMDIChildWnd (2) * 各类之间的存取关系 (0) AfxGetApp !!! (1) GetFirst

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档