이 글에서는 하나의 Frame Window에서 CSplitterWnd 컨트롤을 사용하지 않으면서 여러개의 View를 동시에 분할해서 보여줄 수 있는 방법에 대해 설명한다.
MDI의 경우 CChildFrame 클래스가 View를 포함하는 역할을 수행하는데, 이 클래스에서 자식 View의 크기와 위치를 조정해주는 방식으로 구현이 가능하다.
1. 먼저, CChildFrame 클래스의 OnCreateClient 함수에서 자식 View들을 생성한다.
2. CChildFrame 클래스의 OnSize 함수에 다음 내용을 추가한다:
*Reference: http://www.codeguru.com/forum/showthread.php?t=324687
MDI의 경우 CChildFrame 클래스가 View를 포함하는 역할을 수행하는데, 이 클래스에서 자식 View의 크기와 위치를 조정해주는 방식으로 구현이 가능하다.
1. 먼저, CChildFrame 클래스의 OnCreateClient 함수에서 자식 View들을 생성한다.
// 왼쪽(기본) View 생성
if(!CMDIChildWnd::OnCreateClient(lpcs, pContext))
{
TRACE("Failed to create Left View\n");
return FALSE;
}
// 중간 View 생성
pContext->m_pNewViewClass = RUNTIME_CLASS(CCenterView);
if(CreateView(pContext, AFX_IDW_PANE_FIRST + 1) == NULL)
{
TRACE("Failed to create Left View\n");
return FALSE;
}
// 오른쪽 View 생성
pContext->m_pNewViewClass = RUNTIME_CLASS(CRightView);
if(CreateView(pContext, AFX_IDW_PANE_FIRST + 2) == NULL)
{
TRACE("Failed to create Right View\n");
return FALSE;
}
CreateView 함수의 두번째 Parameter인 ID #를 AFX_IDW_PANE_FIRST, AFX_IDW_PANE_FIRST + 1 의 순서로 를 차례로 증가시키며 View를 생성한다.if(!CMDIChildWnd::OnCreateClient(lpcs, pContext))
{
TRACE("Failed to create Left View\n");
return FALSE;
}
// 중간 View 생성
pContext->m_pNewViewClass = RUNTIME_CLASS(CCenterView);
if(CreateView(pContext, AFX_IDW_PANE_FIRST + 1) == NULL)
{
TRACE("Failed to create Left View\n");
return FALSE;
}
// 오른쪽 View 생성
pContext->m_pNewViewClass = RUNTIME_CLASS(CRightView);
if(CreateView(pContext, AFX_IDW_PANE_FIRST + 2) == NULL)
{
TRACE("Failed to create Right View\n");
return FALSE;
}
2. CChildFrame 클래스의 OnSize 함수에 다음 내용을 추가한다:
CWnd *pWndL = GetDlgItem(AFX_IDW_PANE_FIRST);
CWnd *pWndC = GetDlgItem(AFX_IDW_PANE_FIRST + 1);
CWnd *pWndR = GetDlgItem(AFX_IDW_PANE_FIRST + 2);
pWndL->MoveWindow(0, 0, cx / 3, cy);
pWndC->MoveWindow(cx / 3, 0, cx / 3, cy);
pWndR->MoveWindow(cx / 3 * 2, 0, cx / 3, cy);
OnCreateClient 함수에서 View 생성시 지정해준 ID #를 이용해 각 View의 포인터를 얻어와 MoveWindow 함수로 레이아웃을 결정해준다.CWnd *pWndC = GetDlgItem(AFX_IDW_PANE_FIRST + 1);
CWnd *pWndR = GetDlgItem(AFX_IDW_PANE_FIRST + 2);
pWndL->MoveWindow(0, 0, cx / 3, cy);
pWndC->MoveWindow(cx / 3, 0, cx / 3, cy);
pWndR->MoveWindow(cx / 3 * 2, 0, cx / 3, cy);
*Reference: http://www.codeguru.com/forum/showthread.php?t=324687
'MFC' 카테고리의 다른 글
protected 속성으로 런타임클래스를 사용해라?....고찰 (1) | 2008.09.05 |
---|---|
MDI 구조 스파이플러스로 살펴보기 - 분석 (1) | 2008.09.04 |
다이얼로그에 뷰 올리기 (1) | 2008.09.04 |
SDI 단일 문서에 다중 뷰 추가 - MSDN 표준방식 (0) | 2008.09.04 |
Multi_View 사용하는 방법 - 소스 참조 (1) | 2008.09.04 |
스플릿트 윈도우 외국 소스 - 참조 (0) | 2008.09.04 |
뷰간 화면전환 - 참조해봐~~~ (2) | 2008.09.04 |