MFC框架各部分指针获取方式

获得CWinApp:

-CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp
-
在其它类中只能用AfxGetApp()


获得CMainFrame:

-CMinApp中用AfxGetMainWnd()或者m_pMainWnd
-
CChildFrame中可用GetParentFrame()
-
在其它类中用AfxGetMainWnd()


获得CChildFrame:

-CView中用GetParentFrame()
-
CMainFrame中用MDIGetActive()GetActiveFrame()
-
在其它类中用AfxGetMainWnd()->MDIGetActive()AfxGetMainWnd()->GetActiveFrame()


获得CDocument:

-CView中用GetDocument()
-
CChildFrame中用GetActiveView()->GetDocument()
-
CMainFrame中用
  SDI:GetActiveView()->GetDocument()
  MDI:MDIGetActive()->GetActiveView()->GetDocument()
-
在其它类中
  SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
 MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()


获得CView:

-CDocument POSITION pos =GetFirstViewPosition();GetNextView(pos)
-
CChildFrame GetActiveView()
-
CMainFrame
  SDI:GetActiveView()
  MDI:MDIGetActive()->GetActiveView()
-
在其它类中
  SDI:AfxGetMainWnd()->GetActiveView()
  MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()

下面给出一个表格:

 

获得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的这几个类的关系,可以很容易明白上面的这些乱七八糟的逻辑。

App是应用域,所有的域中的东西都可以通过全局函数访问到它。

MainFrame是主框架,也基本可以用全局函数访问到。

MainFrame下是若干个ChildFrameChildFrame中若干个ViewDocument(可能不成对),ChildFrame管理着ViewViewDocument进行互操作。

因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->Active ChildFrame-->Active View-->Document这条线进行访问,这应该叫什么来自?万能方法吧^_^

恕我懒惰,不愿意画一个更详细的图解,凑合着看看吧。

 

你可能感兴趣的:(框架,mfc)