2008년 11월 25일 화요일

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

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

댓글 없음:

댓글 쓰기