- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Vc文档和视图
文档/视图结构的应用程序框架 本章内容 文档、视图、框架的关系简介 文档/视图结构的应用程序框架 SDI/MDI程序的文档/视图结构 应用实例 本章重点: -文档/视图结构框架的理解和应用 文档/视图结构框架的提出 简单应用程序框架中最主要的问题是CFrameWnd类要完成的任务太多、太杂。 文档/视图结构的主要思想就是明确划分CFrameWnd的工作,将这些工作按照分工交给不同的类去处理。 文档/视图结构中的CFrameWnd类的主要作用是提供应用程序的框架,不再针对具体问题做处理。 文档/视图结构引入了三个新的类: CDocument类:包含应用程序的数据及其处理方法 CView类:分担了CFrameWnd的显示操作并显示文档的数据 CDocTemplate类:是文档/视图结构的维护类,负责建立并维护框架窗口、文档和视图 因此,文档/视图结构中应用程序的主要框架部分至少包括5个类的对象。 一、文档、视图和框架的关系 文档和视图是相互交互的;视图通过GetDocument函数获得指向关联文档的指针,从文档读取数据后进行显示,并将与用户交互后的结果送回文档处理。 框架由文档模板类创建,能够为视图类和应用程序提供显示的窗口。 文档、视图和框架三者相互关联、相互协调,彼此都包含了指向对方的指针。 文档/视图结构的优点和使用 特征:数据操作与数据显示分离,数据操作和数据显示分别按标准方法封装于两个不同的对象。 使得程序的更加清晰,更易于维护。 MFC类对公共的文档/视图活动提供了大量的函数,由类库框架来管理,方便用户使用。 打印预览功能,可以方便实现“所见即所得”的打印效果。 总之,文档/视图结构能够很好的解决数据处理与数据显示的协调问题,但也不是适用于所有的场合,例如:移植早期的Windows应用程序。所以,要根据具体情况选择合适的应用程序结构。 三、文档和视图 16.3.3 文档类的数据成员 16.3.6 文档与视图结构的交互 四、文档/视图应用程序 小结 文档/视图结构的主要思路就是明确划分CFrameWnd的工作,并将这些工作按照分工分别交给不同的类去处理。 文档视图结构引入了三个类:CView,CDocument和CDocTemplate类。 文档/视图结构至少涉及5个类的对象: 应用程序的主体是CWinApp派生类的对象。 框架窗口是CFrameWnd的派生对象。 “文档”指应用程序的数据结构是CDocument的派生对象 “视图”是CView类的派生对象,分担了显示的工作。 文档/视图的管家,CDocTemplate派生类的对象。 4.文档变量初始化 为了测试该程序,在CMysdiDoc的OnNewDocument成员变量中为公有成员m_str赋以初值 “ 您好, 单文档界面的例程!”。 方法是在OnNewDocument的函数实现代码中添加斜体部分的代码内容 BOOL CMymdiDoc2::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; m_str=您好, 单文档界面的例程!; return TRUE; } 5.视图的输出 下面我们将为Mysdi程序的视图类CMysdiView类的OnDraw成员函数添加一些代码,用于将文档类中的m_str成员变量的内容显示到视图的框架窗口中。 这里我们用下面的代码来替换类CMysdiView的OnDraw成员函数 void CMysdiView::OnDraw(CDC* pDC) { CMysdiDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rectClient; GetClientRect(rectClient); // 获取当前客户区的指针 CSize sizeClient=rectClient.Size(); // 获取当前客户区的大小 CString str=pDoc-m_str; // 从文件中读取数据 CSize sizeTextExtent=pDC-GetTextExtent(str); // 用新选定的字体绘制字符串 pDC-TextOut((sizeClient.cx-sizeTextExtent.cx)/2,(sizeClient.cy-sizeTextExtent.cy)/2,str); } 6.文档串行化 先在 “ 编辑” 菜单中添加一条改变文档内容的菜单,用户可以将对文档显示文本所做的修改保存到一个磁盘文件中,具体的实现方法如下: (1)单击Works
文档评论(0)