提出問題:
有一個樹型控件,在其TVITEM的用戶部分存儲著一個文檔指針。當雙擊項目時,我想從打開的文檔列表中激活文檔。所以對於給定的文檔類(CDocument)指針,如何在MDI應用中激活這個指針?
在回答這個問題之前需要糾正的是:文檔是不能被激活的,只有窗口能被激活。在提出的問題中隱含著這樣一種假設,就是每一個文檔只有一個視,MDI子框架與這個視關聯。因此要激活文檔也就是盯住幾個指針。從文檔可以獲得它的視。
POSITION pos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(pos);
pView是與文檔關聯的第一個視。這裡假設這個文檔有一個而且只有一個視。如果這個文檔有一個以上關聯的視(例如,在MDI應用中對相同的文檔用戶打開了兩個窗口),你必須決定激活哪一個。最容易的辦法是首先使用列表中第一個視。一旦你有了這個視,你必須獲得包含它的MDI子框架。
CFrameWnd *pFrame = pView->GetParentFrame();
GetParentFrame得到給定窗口的第一個父框架—第一個父窗口是CFrameWnd。假設應用是MDI,那麼包含子框架的視應該為CMDIChildWnd。一旦有了MDI子框架,你就可以調用pFrame->MDIActivate來激活它。另外,你還必須將指針強行轉換為CMDIChildWnd。