如何在MFC中其他类访问和交换文档Doc类与视图View类的数据.docVIP

如何在MFC中其他类访问和交换文档Doc类与视图View类的数据.doc

  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中其他类访问和交换文档Doc类与视图View类的数据

HYPERLINK /jackson-leung/articles/2280127.html 在MFC的单文档里,每个类都有获得其他类指针的一套方法每个类都有获得其他类指针的一套方法.现归纳如下.? 为方便说明,现假设已用app wizard生成了一个SDI应用程序test,包含如下几个类:? CTestApp,CTestDoc,CTestView,CMaimFrame? 1:从视图类获得文档类指针? 如前所述,在视图类中需要引用文档类的地方之前,使用如下语句:? CTestDoc *pDoc=(CTestDoc *)GetDocument();? 以后便可使用pDoc指针访问文档类.? 此处的强制类型转换在test应用程序中并不需要,因为该程序只有一个视图类,并且在InitInstance()? 重用SDI文档模板进行了装配.你可以在Test.cpp种的InitInstance()方法中看到如下语句:? CSingleDocTemplate *pDocTemplate;? pDocTemplate=new CSingleDocTemplate(IDR_MAINRAME,RUNTIME_CLASS(CTestDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CTestView));? AddDocTemplate(pDocTemplate);? 以及TestView.h中的定义:? inline CTestDoc *CTestView::GetDocument()? {return (CTestDoc *)m_pDocument;}? 简而言之,就是说CTestView的GetDocument()函数自然而然的认为CTestDoc是与它 相配 的.当生成了一个具有多个视图类的应用程序时,(如用CSplitterWnd将窗口分为两栏,但这两栏并非从同一种视图类派生就属于这种情况。具体实现在本文讨论范围之外),只有一个视图类能与唯一的文档类用文档模板进行装配,那么在另外一个未经装配的类中要取得文档类的指针,则需进行强制类型转换。? 2:从文档类取得视图类指针? CDocument类提供了两个函数用于视图类的定位: GetFirstViewPosition()和 GetNestView(),? virtual POSITION GetFirstViewPosition() const;? virtua CView * GetNextView (POSITION rPosition )const;?   注意:GetFirstView()括号中的参数用的是引用方式,因此执行后值可能改变.?   GetFitstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用引用调用和方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定义一个POSITION结构变量来辅助操作):?   CTestView*pTestView;? POSITISONpos=GetFirstViewPosition();? pTestView=GetNextView(pos);? 这样,便得到了CTestView类的指针pTestView.执行完这几句后,变量pos=NULL,因为没有下一个视图类,自然也没有下一个视图类的POSITION.? 但是这几条语句太简单,不具有太强的通用性和安全特征,当象前面说的那样,当要在多个视图类中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个指针指向的是否是某个类的实例时,可用IsKindOf()成员函数是行检查,如:?   pView- IsKindof(RUNTIME-CLASS(CTestView));? 即是检查pView所指是否是CTestView类。?   有了以上基础,我们可以从文档类取得任何类的指针。为了方便,我们将其作为一个文档类和成员函数,它有一个参数,表示要获得哪个类的指针,它返回的就是这个类的指针。实现如下:?   CView * CTestDoc:: GetView(CRuntimeClass*pClass)? {CView*pView;POSITIONpos=GitFirstViewPosition();while(pos!=NULL){pView=GitNextView(pos);? if(pView- IsKindOf(pClass))break;}? if(!pView- IsKindof(pClass))

文档评论(0)

138****7331 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档