第4章文档视图.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章文档视图.doc

第4章 文档与视图 MFC提供了将应用程序的数据与显示分开的文档/视图结构,它为应用程序提供了统一的框架。如 正在运行中的SDI应用程序中的对象 4.1 文档/视图体系 文档(document)对应于用户的数据(可以是文本、数值、图像、声音、视频等),它可以从磁盘文件中读入,也可写入磁盘文件,用户还可以定义、修改、管理这些数据。对应的MFC类为CDocument。 视图(view)是一种窗口对象,对应于框架窗口的客户区,它负责在屏幕和打印机上显示和输出数据,为用户提供观察、选择、编辑文档数据的交互界面。对应的MFC类为CView。 文档/视图结构有两种主要的方式:SDI(Single Document Interface,单文档界面)和MDI(Multiple Document Interface,多文档界面)。在.NET中新添加了一种MTDI(Multiple Top-level Document Interface,多顶级文档界面)。 应用程序的文档/视图结构种类,可以在创建MFC应用程序时,在“MFC应用程序向导”对话框的“应用程序类型”页中设置(缺省为MDI),在该对话框页中还可以选择是否具有“文档/视图结构支持”(缺省是选中)。参见下图。 SDI应用程序只有一个框架窗口(类)和一个视图窗口(对应于框架窗口的客户区),且只有一个文档类,每次只能打开一个文档。这里的文档和视图一般是一一对应的。 MDI应用程序有一个主框架窗口(类),可有任意多个子框架窗口和对应的视图客户区窗口,也可有多个文档类,可以同时打开多个文档/窗口。这里,每个视图对应于一个文档,而每个文档则可对应于多个视图。 MTDI类似于MDI,只是MDI中的每个文档视图窗口都是主框架窗口的子窗口(只能位于主框架窗口的客户区内);而MTDI的文档视图窗口都是顶层窗口,位于主框架窗口之外。 SDI MDI MTDI 不同的文档界面 MDI/MTDI的一个文档可以对应多个视图 1.文档模板类 文档、框架窗口与视图通过文档模板联系在一起,MFC的文档模板类为CDocTemplate。对SDI与MDI,它有两个对应的派生类CSingleDocTemplate与CMultiDocTemplate: 它们的构造函数的参数都一样: C[Single|Multi]DocTemplate ( // 文档模板构造函数 UINT nIDResource, // 文档类型的资源ID CRuntimeClass* pDocClass, // 派生文档类对象的指针 CRuntimeClass* pFrameClass, // [派生]框架窗口类对象的指针 CRuntimeClass* pViewClass // 派生视图类对象的指针 ); CWinApp类创建文档模板的操作分两步进行,首先用文档模板类的构造函数创建一个SDI或MDI文档模板的实例,然后调用CWinApp类的成员函数AddDocument将该模板添加到应用程序的模板列表中。创建文档模板的操作一般在派生应用程序类的InitInstance成员函数中完成。 例如:(SDI) BOOL CDrawApp::InitInstance() { …… // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CDrawDoc), RUNTIME_CLASS(CMainFrame), // 自定义 MDI 子框架 RUNTIME_CLASS(CDrawView)); AddDocTemplate(pDocTemplate); …… } 其中,RUNTIME_CLASS宏返回一个指向CRunTimeClass类的指针: CRuntimeClass* RUNTIME_CLASS( class_name ) 又例如:(MDI) BOOL CImageApp::InitInstance() { …… // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_BMPTYPE, RUNTIME_CLASS(CImageDoc), RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架 RUNTIME_CLASS

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档