当前位置:有风信息港IT学院编程技术JAVA → MFC类中获得其它类指针

MFC类中获得其它类指针

减小字体 增大字体 作者:有风IT学院  来源:有风信息港  发布时间:2008-1-13 9:32:00
  当用VC++的Application Wizard生成除了CDialog Basiced以外的应用程序时,将自动产生视图类、文档类、主帧窗口类、应用程序类等等。一般来说,程序的核心数据及操作在文档类中实现。跟界面有关的数据及操作在视图类中实现。当需要在某个类中使用不属于该类的数据时,必须要取得该数据所属类的指针。从视图类获得文档类的指针是很容易的,用GetDocument即可,这在一般的MFC文档中有介绍,也是编程中极为常用的的操作,比如视图类在进行重画等操作时,往往要用到文档类中的数据。然而只能从视图类获得文档类的指针是远远不够的,每个类都有获得其它各个类指针的一套方法,现归纳如下: 为方便说明,现假设已用Application Wizard生成一个SDI应用程序Test,包含如一几个类:CTestApp,CTestDoc,CTestView,CMainFrm.1.从视图类获得文档类的指针 如前所述,在视图类中需要引用文档类的地方之前,使用以下语句:

  CTextDoc *pDoc=(CTestDoc*)GetDocument();

  以后便可使用pDoc指针访问文档类。

  此处的强制类型转换在Test应用程序中并不必需,因为该程序中只有一个视图类,并且在Initstance()中用SDI文档模板进行了装配,你可以在Test.cpp中的Initstance()方法中看到以下语句:

  CSingleDocTemplate *pDocTemplate;

  pDocTemplate=new CSingleDocTemplate(IDR_MAINFRAME,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()和

热门推荐:ASP与数据库应用(给初学者)  php入门


[1] [2] [3]  下一页