深入分析MFC视图结构课程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入分析MFC文档视图结构(项目实践) 1 必备基础知识概述 1.1 MFC 当我们使用 MFC AppWizard 生成一个 MFC 程序,选用所有默认的设置(当然也是 Multiple Documents ,本文讨论主要基于 Multiple Documents ,对于 Single Document 情况仅以简单表述提及,皆因后者和前者很多相似相同之处,但前者更为复杂,并且更加常用),假设你的程序名称为 A ,则你会得到 CMainFrame CChildFrame ? CAboutDlg ? CADoc ? CAView ? CAApp 6 个类( Single Document 仅少一个 CChildFrame 类,其余均同),这里先要给出一个 MFC 支持文档视图结构程序(以下简称 App )的主要组成: ??一个 App (对应类 CAApp )可以包含多个文档模版( CDocTemplate ),但是 MFC AppWizard (无论是 SDI 还是 MDI )都只是默认生成一个,需要自己手工添加(在后面实际项目例子提供示例) MFC 中 CWinApp 的成员变量 CDocManager* m_pDocManager 实现的,我们的 CAApp 正是继承自 MFC 提供的 CWinApp 类 ??CDocManager 类则拥有一个指针链表 CPtrList m_templateList 来维护这些文档模版版都是在 CAApp :: InitInstance ()中通过 AddDocTemplate(pDocTemplate) ??CDocTemplate 拥有 3 个成员变量,分别保存着 Document View ? Frame 的 CRuntimeClass 指针,另外持有成员变量 m_nIDResource ,用来指定这个 Document 显示时候采用的菜单资源 4 份数据都在 CAApp :: InitInstance ()中 CDocTemplate 的构造函数中指定 Document 中拥有一个回指 CDocTemplate 的指针( m_pDocTemplate ) ??一个文档可以有多个视图,由 Document 中成员变量 CPtrList m_ViewList 维护 ??CFrameWnd 拥有一个成员变量 CView* m_pActiveView 指向当前活动的 View ??CView 中拥有一个成员变量 CDocument* m_pDocument 指向该视图相关的 Document [ 注解 ] : ① MFC SDI/MDI 程序默认都默认生成了一个文档模版,并将这个文档模版 Add 到其文档模版的链表中,由于这是 MFC 默认提供的,因此这个文档模版会被插入到文档模版的第一个位置,而 MFC 也是通过这个文档模版的特定位置可以确定的,当我们点击 File ( Open ) / File ( New )的时候,这个文档模版会被启用 除了侯捷先生在《深入浅出 MFC 中列出的以上的深入分析,我们还应该(很大程度上更加重要)掌握以下的关于 MFC SDI/MDI 的知识: ??文档的本质:文档是用来保存数据以及关于数据的处理的,每当 MFC SDI/MDI 响应 File ( Open ) / File ( New )的时候都会打开一份文档:文档是被视图观察的对象 ??视图本质:视图在 Windows 中就是一个窗口,也就是一个可视化的矩形区域( SDI 中是 MainFrame , MDI 是 ChildFrame ) Create 一个视图,并且去显示它 ??框架的本质:框架实际是也是一个 Windows 窗口 MFC 中我们看到的窗口实际上 Frame 和 View 共同作用的结果 ??在某一时刻,程序中只有一个活动的文档,即当前的文档 1.2 MFC SDI/MDI 各个类之间的互访 在实际项目开发中用的最多就是各个类之间的互访问,这里将网络上和书籍中提到的做了一个总结,也是笔者在实际开发中都用到过的 访问对象 访问位置 访问实现 应用程序 App 任何位置 ① AfxGetApp(); ② 在要使用应用程序 App 的文件中加入: extern CAApp theApp ,然后直接使用全局的 theApp 变量 主框架窗口 任何位置 ① AfxGetMainWnd(); ② AfxGetApp()-m_pMainWnd; 视图 框架类中 GetActiveView();// 当前的活动视图 文档类中 GetFirstViewPosition (); // 可以获取全部视图 Ge

文档评论(0)

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

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

1亿VIP精品文档

相关文档