| 獲得CWinApp | 獲得CMainFrame | 獲得CChildFrame | 獲得CDocument | 獲得CView |
在CWinApp中 | | AfxGetMainWnd() m_pMainWnd | AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() | SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() | SDI:AfxGetMainWnd()->GetActiveView() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView() |
在CMainFrame中 | AfxGetApp() theApp | | MDIGetActive() GetActiveFrame() | SDI:GetActiveView()->GetDocument() MDI:MDIGetActive()->GetActiveView()->GetDocument() | SDI:GetActiveView() MDI:MDIGetActive()->GetActiveView() |
在CChildFrame中 | AfxGetApp() theApp | GetParentFrame() | | GetActiveView()->GetDocument() | GetActiveView() |
在CDocument中 | AfxGetApp() theApp | AfxGetMainWnd() | AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() | | POSITION pos = GetFirstViewPosition();GetNextView(pos) |
在CView中 | AfxGetApp() theApp | AfxGetMainWnd() | GetParentFrame() | GetDocument() | |
在其他類中 | AfxGetApp() | AfxGetMainWnd() | AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() | SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() | SDI:AfxGetMainWnd()->GetActiveView() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView() |
理一理MFC的這幾個(gè)類的關(guān)系,可以很容易明白上面的這些亂七八糟的邏輯。
App是應(yīng)用域,所有的域中的東西都可以通過全局函數(shù)訪問到它。
MainFrame是主框架,也基本可以用全局函數(shù)訪問到。
MainFrame下是若干個(gè)ChildFrame,ChildFrame中若干個(gè)View和Document(可能不成對(duì)),ChildFrame管理著View,View和Document進(jìn)行互操作。
因此整體框架就出來了,一般除了直接應(yīng)用的關(guān)系都可以通過MainFrame-->Active ChildFrame-->Active View-->Document這條線進(jìn)行訪問,這應(yīng)該叫什么來自?萬(wàn)能方法吧^_^。