2012-03-15 43 views

回答

6

有更簡單的方法來做到這一點,但這裏是直接的方法。假設下面的代碼是一個菜單句柄在您的CMainFrame類:

for(POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition(); pos != NULL;) 
    { 
    CDocTemplate* pTempl = AfxGetApp()->GetNextDocTemplate(pos); 

    for(POSITION pos1 = pTempl->GetFirstDocPosition(); pos1!= NULL;) 
    { 
     CDocument* pDoc = pTempl->GetNextDoc(pos1); 

     for(POSITION pos2 = pDoc->GetFirstViewPosition(); pos2 != NULL;) 
     { 
     CView* pView = pDoc->GetNextView(pos2); 
     if(pView->IsKindOf(RUNTIME_CLASS(...))) 
     { 
      // Do what you need with the view... 
     } 
     } 
    } 
    } 

基本上,你必須得到一個指針模板,看看與此相關的CDocuments,併爲每個CDocument的,遍歷通過連接到的意見到文件。

如果只使用一個模板,一個文檔和多個視圖,則可以將模板保存在CMainFrame類中,並通過調用AfxGetApp() - > m_pTemplate來更快地獲取它。

MFC在某些方面很時髦,但它可以讓你在任何需要的時候訪問Doc/View體系結構的任何部分。

希望這點能指引您朝着正確的方向發展。

+0

是的,我同意這可能是最好的方式來做到這一點。還有一種方法冒着指出這種盲目明顯的風險 - 如果你知道你以後需要一個視圖指針,在創建視圖時將其存儲並在視圖被銷燬時將其刪除。當我知道我需要經常訪問查看類時,我已經做了幾次,因爲它比上面的方法快得多。 – Redeye 2012-03-16 09:28:09

+0

第二個for循環的條件不應該像當前那樣讀'pos1!= NULL',而不是'pos!= NULL'嗎? – aguazales 2013-06-04 18:00:12

相關問題