2
說我想訪問MFC MDI應用程序中的doc類中的特定視圖(如果它已打開)。視圖可以是當前活動或不活動。如果我可以假設的觀點始終是積極的,我可以按照這個指令在MFC中獲取現有的但非活動的視圖
http://support.microsoft.com/kb/108587
,但認爲可能是也無活性。有沒有辦法做到這一點?
說我想訪問MFC MDI應用程序中的doc類中的特定視圖(如果它已打開)。視圖可以是當前活動或不活動。如果我可以假設的觀點始終是積極的,我可以按照這個指令在MFC中獲取現有的但非活動的視圖
http://support.microsoft.com/kb/108587
,但認爲可能是也無活性。有沒有辦法做到這一點?
有更簡單的方法來做到這一點,但這裏是直接的方法。假設下面的代碼是一個菜單句柄在您的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體系結構的任何部分。
希望這點能指引您朝着正確的方向發展。
是的,我同意這可能是最好的方式來做到這一點。還有一種方法冒着指出這種盲目明顯的風險 - 如果你知道你以後需要一個視圖指針,在創建視圖時將其存儲並在視圖被銷燬時將其刪除。當我知道我需要經常訪問查看類時,我已經做了幾次,因爲它比上面的方法快得多。 – Redeye 2012-03-16 09:28:09
第二個for循環的條件不應該像當前那樣讀'pos1!= NULL',而不是'pos!= NULL'嗎? – aguazales 2013-06-04 18:00:12