VC MFC SDI/MDI框架各部分指针获取…

来源:互联网 发布:全栈工程师用什么编程 编辑:程序博客网 时间:2024/05/24 00:56

 

获得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下是若干个ChildFrame,ChildFrame中若干个View和Document(可能不成对),ChildFrame管理着View,View和Document进行互操作。

因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->ActiveChildFrame-->ActiveView-->Document这条线进行访问

原创粉丝点击