■ MFC 프로그램 구성 클래스간 상호 참조




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;
}



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());


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();
Posted by six605
,