MFC應用程式中指標使用的注意事項?

摘要:關於MFC應用程式中指標使用的注意事項。

步驟/方法

  GetNextView()括號中的引數用的是引用方式,因此執行後值可能改變。
  GetFirstViewPosition()用於返回第一個檢視位置(返回的並非檢視類指標,而是一個POSITION型別值)
  GetNextView()有兩個功能:返回下一個檢視類的指標以及用引用呼叫的方式來改變傳入的POSITION型別引數的值。

MFC應用程式中指標使用的注意事項

  很明顯,在Test程式中,只有一個檢視類,因此只需將這兩個函式呼叫一次即可得到CTestView的指標如下(需定義一個POSITION結構變數來輔助操作):
  CTestView* pTestView;
  POSITION pos=GetFirstViewPosition();
  pTestView=GetNextView(pos);

MFC應用程式中指標使用的注意事項

  這樣,便可到了CTestView類的指標pTestView。執行完幾句後,變數pos=NULL,因為沒有下一個檢視類,自然也沒有下一個檢視類的POSITION.但是這幾條語句太簡單,不具有太強的通用性和安全特徵;當象前面說的那樣,當要在多個檢視為中返回某個指定類的指標時,我們需要遍歷所有檢視類,直到找到指定類為止。判斷一個類指標指向的是否某個類的例項時,可用IsKindOf()成員函式時行檢查,如下所示:
  pView-> IsKindOf(RUNTIME_CLASS(CTestView));
  這樣即可檢查pView所指是否是CTestView類。
  有了以上基礎,我們已經可以從文件類取得任何類的指標。為了方便,我們將其作為一個文件類的成員函式,它有一個引數,表示要獲得哪個類的指標。

MFC應用程式中指標使用的注意事項

  實現如下:
  CView* CTestDoc::GetView(CRuntimeClass* pClass)
  {
  CView* pView;
  POSITION pos=GetFirstViewPosition();
  while(pos!=NULL)
  {
  pView=GetNextView(pos);
  if(!pView-> IsKindOf(pClass))
  break;
  }
  if(!pView-> IsKindOf(pClass))
  {
  AfxMessageBox( "Connt Locate the View.\r\n ");
  return NULL;
  }
  return pView;
  }
  其中用了兩次檢視類的成員函式IsKindOf()來判斷,是因為退出while迴圈有三種

MFC應用程式中指標使用的注意事項

相關問題答案