본문 바로가기

3.구현/VC++

[MFC] MainFrame/Document/VIew 프레임워크간 상호참조

1. 전역함수

CWinApp* AfxGetApp();

CWinApp 파생 클래스 참조에 사용

CWnd* AfxGetMainWnd();

메임 프레임 클래스의 인스턴스 포인터 반환

2. 프레임 윈도우 -> 도큐먼트/뷰

CFrameWnd::GetActiveDocument()

도큐먼트 클래스 참조

CFrameWnd::GetActiveView()

현 프레임 윈도우와 연결된 뷰 참조

3. 뷰 -> 프레임윈도우/도큐먼트

CFrameWnd* GetParentFrame() const;

프레임 윈도우 참조

CView::GetDocument()

뷰에 연결된 도큐먼트 참조

static_cast<CMainFrame*>(GetParentFrame())->SetSize(CPoint(480, 350));

메임프레임의 크기 조정 예

4. 도큐먼트 -> 뷰/프레임 윈도우

CDocument::GetFirstViewPosition(), GetNextView()

하나의 도큐먼트에는 여러 개의 뷰가 있다. 처음 뷰와 다음 뷰 참조

CView* pView  = GetNextView(pos);
pView->UpdateWindow();

CView* pView = m_viewList.GetHead(); // m_viewList는 도큐먼트에 있는 것으로 뷰들을 관리하는 연결 리스트이다.
pView->UpdateWindow();

AfxGetMainWnd()을 이용해서 프레임 윈도우 참조

5. 기타

원하는 컨트로 참조 획득(전역함수)

CWnd *pWnd = GetDlgItem(컨트롤ID명);
pWnd->GetWIndowRect(&rect);

원하는 스플릿 창으로 이동

SetActiveView((CView*)m_wndSplitter.GetPane(0,1));

m_wndSplitter는 스플릿 객체이고,
(0,1)은 양쪽 창에서 오른쪽창으로 앞에 0은 상하방향, 뒤에 1은 좌우 방향
원하는 스플릿 창을 참조

CWnd *pWndRight = ((CSplitterWnd*)GetParent())->GetPane(0,1);
반응형