第6章 章框架窗口文档和视图.pptVIP

  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文档。上传文档
查看更多
第6章 章框架窗口文档和视图

6.5.1 文档与视图的相互作用 1. CView::GetDocument函数 当MFC AppWizard产生应用程序CView类时,它同时也创建一个安全类型的 GetDocument函数,它返回的是指向用户派生文档类的指针。该函数是一个内联 (inline)函数,如下面的代码: CEx_SDIDoc* CEx_SDIView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CEx_SDIDoc))); // “断言”m_pDocument指针所指向的CEx_SDIDoc类是一个RUNTIME_CLASS类型 return (CEx_SDIDoc*)m_pDocument; } 6.5.1 文档与视图的相互作用 2. CDocument::UpdateAllViews函数 如果文档中的数据发生了改变,那么所有的视图都必须被通知到,以便它们能够 对所显示的数据进行相应的更新。UpdateAllViews函数就起到这样的作用,它的 原型如下。 void UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL ); 其中,参数pSender表示视图指针,若在应用程序文档类的成员函数中调用该函 数,则此参数应为NULL,若该函数被应用程序视图类中的成员函数调用,则此 参数应为this。lHint通常表示更新视图时发送信息的提示标识值,pHint表示存贮 信息的对象指针。 当UpdateAllViews函数被调用时,如果参数pSender指向某个特定的视图对象,那 么除了该指定的视图之外,文档的所有其他视图的OnUpdate函数都会被调用。 6.5.1 文档与视图的相互作用 3. CView::OnUpdate函数 这是一个虚函数。当应用程序调用了CDocument::UpdateAllViews函数时,应用 程序框架就会相应地调用该函数。 virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint ); 其中,参数pSender表示文档被更改的所在视图类指针,当为NULL时表示所有 的视图需要更新。 默认的OnUpdate函数(lHint = 0, pHint = NULL)使得整个窗口矩形无效。如果用 户想要视图的某部分无效,那么用户就要定义相关的提示(Hint)参数给出准确的 无效区域;lHint和pHint含义同UpdateAllViews。 事实上,hint机制主要用来在视图中根据提示标识值来获取文档或其他视图传递 来的数据,例如将文档的CPoint数据传给所有的视图类,则有下列语句: GetDocument()-UpdateAllViews(NULL, 1, (CObject *)m_ptDraw); 6.5.1 文档与视图的相互作用 4. CView::OnInitialUpdate函数 当应用程序被启动时,或当用户从“文件”菜单中选择了“新建”或“打开”时,该 CView虚函数都会被自动调用。该函数除了调用无提示参数(lHint = 0, pHint = NULL)的OnUpdate函数之外,没做其他任何事情。 但用户可以重载此函数对文档所需信息进行初始化操作。例如,如果用户应用程 序中的文档大小是固定的,那么用户就可以在此重载函数中根据文档大小设置视 图滚动范围;如果应用程序中的文档大小是动态的,那么用户就可在文档每次改 变时调用OnUpdate来更新视图的滚动范围。 6.5.1 文档与视图的相互作用 5. CDocument::OnNewDocument函数 在文档应用程序中,当用户从“文件”菜单中选择“新建”命令时,框架将首先构造 一个文档对象,然后调用该虚函数。这里是设置文档数据成员初始值的好地方, 当然文档数据成员初始化处理还有其他的一些方法。例如,对于文档应用程序来 说,用户还可在文档构造函数中添加初始化代码。 MFC AppWizard为用户的派生文档类自动产生了重载的OnNewDocument函 数,如下面的代码: BOOL CMyDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) //注意一定要保证对基类函数的调用, return FALSE; // Do initialization of new document here. return TRUE;

文档评论(0)

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

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

1亿VIP精品文档

相关文档