■ MFC 프로그램 구성 클래스간 상호 참조
1. View → Document
[ SDI 프로젝트 ]
- GetDocument() 함수 사용
cf). GetDocument()는 CView 클래스의 멤버 함수
Document 의 인스턴스는 여러개 일 수 있기 때문에 CView 클래스 에서만(CView 파생 클래스 포함)
사용할 수 있다.
※ CView 클래스에서 파생된 클래스
cf). 하나의 Document 에 여러개의 View가 연결되어 있을 경우(분할 윈도우) 클래스 위자드는 하나의 View만
자동적으로 GetDocument 함수를 재정의 해준다.
나머지 View 에서도 GetDocument 를 사용하기 위해 직접 코딩 해주어야 한다.
물론 함수 선언과 정의는 클래스 위자드가 만들어준 것을 그대로 사용하면 된다.
2. Document 얻기
[ SDI 프로젝트 ]
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CTestDoc *pDoc = (CTestDoc *)pFrame->GetActiveDocument();
CTestDoc *pDoc = ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
3. MainFrame 얻기
- ::AfxGetMainWnd()
4. APP 얻기
- ::AfxGetApp()
CTestApp *pApp = (CtestApp *) AfxGetApp();
5. 현재 활성화된 View 얻기
- CFrameWnd::GetActiveView();
MDI 프로젝트에서
1. ChildFrame
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CChildFrame *pChild = ((CMainFrame *)AfxGetMainWnd())->GetActiveFrame();
2. Document
CMainFrame *pFrame = (CMainFrame)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CMdiTestDoc *pDoc = (CMdiTestDoc *)pChild->GetActiveDocument();
CMdiTestDoc *pDoc =
(((CMainFrame *)AfxGetMainWnd())->GetActiveFrame())->GetActiveDocument();
3. View
CCainFrame *pFrame = (CMainFrame)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CMdiTestView *pView = (CMdiTestDoc *)pChild->GetActiveView();
CMdiTestView *pView =
(((CMainFrame *)AfxGetMainWnd())->GetActiveFrame())->GetActiveView();
1. View → Document
[ SDI 프로젝트 ]
- GetDocument() 함수 사용
cf). GetDocument()는 CView 클래스의 멤버 함수
CDocument *CView::GetDocument();
Document 의 인스턴스는 여러개 일 수 있기 때문에 CView 클래스 에서만(CView 파생 클래스 포함)
사용할 수 있다.
※ CView 클래스에서 파생된 클래스
cf). 하나의 Document 에 여러개의 View가 연결되어 있을 경우(분할 윈도우) 클래스 위자드는 하나의 View만
자동적으로 GetDocument 함수를 재정의 해준다.
나머지 View 에서도 GetDocument 를 사용하기 위해 직접 코딩 해주어야 한다.
물론 함수 선언과 정의는 클래스 위자드가 만들어준 것을 그대로 사용하면 된다.
ChRmtEvwrDoc* GetDocument() const;
ChRmtEvwrDoc* CInforFormView::GetDocument() const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(ChRmtEvwrDoc)));
return (ChRmtEvwrDoc*)m_pDocument;
}
ChRmtEvwrDoc* CInforFormView::GetDocument() const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(ChRmtEvwrDoc)));
return (ChRmtEvwrDoc*)m_pDocument;
}
2. Document 얻기
[ SDI 프로젝트 ]
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CTestDoc *pDoc = (CTestDoc *)pFrame->GetActiveDocument();
CTestDoc *pDoc = ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
3. MainFrame 얻기
- ::AfxGetMainWnd()
CMainFrame *pMainFrame;
pMainFrame = reinterpret_cast<CMainFrame *>(::AfxGetMainWnd());
pMainFrame = reinterpret_cast<CMainFrame *>(::AfxGetMainWnd());
4. APP 얻기
- ::AfxGetApp()
CTestApp *pApp = (CtestApp *) AfxGetApp();
5. 현재 활성화된 View 얻기
- CFrameWnd::GetActiveView();
MDI 프로젝트에서
1. ChildFrame
CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CChildFrame *pChild = ((CMainFrame *)AfxGetMainWnd())->GetActiveFrame();
2. Document
CMainFrame *pFrame = (CMainFrame)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CMdiTestDoc *pDoc = (CMdiTestDoc *)pChild->GetActiveDocument();
CMdiTestDoc *pDoc =
(((CMainFrame *)AfxGetMainWnd())->GetActiveFrame())->GetActiveDocument();
3. View
CCainFrame *pFrame = (CMainFrame)AfxGetMainWnd();
CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveFrame();
CMdiTestView *pView = (CMdiTestDoc *)pChild->GetActiveView();
CMdiTestView *pView =
(((CMainFrame *)AfxGetMainWnd())->GetActiveFrame())->GetActiveView();