MFC中App,Doc,MainFrame,View各指针的互相获取

首先说明这四个类的

执行顺序是:App->Doc->MainFrame->View

消息响应顺序是:View->Doc->MainFrame->App

 1 // App中获取其它三项指针
 2 void CSDIApp::OnApp()
 3 {
 4     // App
 5     // Doc
 6     CDocument *pDoc = ((CFrameWndEx *)m_pMainWnd)->GetActiveDocument();//成员变量CFrameWndEx m_pMainWnd
 7     // MainFrame
 8     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
 9     // View
10     CView *pView = ((CFrameWndEx *)m_pMainWnd)->GetActiveView();
11 }
12 
13 // Doc中获取其它三项指针
14 CSDIDoc::CSDIDoc()//构造函数
15 {
16     // App
17     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
18     // Doc
19     // MainFrame
20     // Doc的创建先于MainFrame
21     // View
22     // Doc的创建先于View
23 }
24 void CSDIDoc::OnDoc()
25 {
26     // App
27     // 同构造函数
28     // Doc
29     // MainFrame
30     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
31     // View
32     CView *pView= (CView *)pMain->GetActiveView();     
33     POSITION pos = GetFirstViewPosition();       
34     pView = GetNextView(pos); 
35 }
36     
37 // MainFrame中获取其它三项指针
38 CMainFrame::CMainFrame()//构造函数
39 {
40     theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2005);
41     // App
42     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
43     // Doc
44     // 构造函数里无法得到当前激活的Doc
45     // MainFrame
46     // View
47     // 构造函数里无法得到View指针,因为Main先于View创建。
48 }
49 void CMainFrame::OnMain()
50 {
51     // App
52     // 同构造函数
53     // Doc
54     CDocument *pDoc = (CDocument *)GetActiveDocument();
55     // MainFrame
56     // View
57     CView *pView = (CView *)GetActiveView();
58 }
59 
60 // View中获取其它三项指针
61 CSDIView::CSDIView()//构造函数
62 {
63     // App
64     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
65     // Doc
66     /* 无法在View的构造函数里得到Doc指针
67        GetDocument();实际上是返回m_pDocument
68        m_pDocument在OnCreate();里创建        */
69     //CDocument *pDoc = GetDocument();
70     // MainFrame
71     // 构造函数里无法得到MainFrame指针
72     // CFrameWndEx *pMain = (CFrameWndEx *)pApp->m_pMainWnd;
73     // View
74 }
75 void CSDIView::OnView()
76 {
77     // App
78     // 同构造函数
79     // Doc
80     CDocument *pDoc = GetDocument();
81     // MainFrame
82     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
83     // View
84 }
85 
86 // Dlg中获取指针
87 CDlg::CDlg(CWnd* pParent /*=NULL*/)//构造函数
88     : CDialog(CDlg::IDD, pParent)
89 {
90     // App
91     CWinAppEx *pApp = (CWinAppEx *)AfxGetApp();
92     // Doc
93     CDocument *pDoc = ((CFrameWndEx *)AfxGetMainWnd())->GetActiveDocument();
94     // MainFrame
95     CFrameWndEx *pMain = (CFrameWndEx *)AfxGetMainWnd();
96     // View
97     CView *pView = ((CFrameWndEx *)AfxGetMainWnd())->GetActiveView();
98 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。