동적 분할 윈도우
동적 분할 윈도우는 SDI 처럼 생긴 응용 프로그램의 클라이언트 뷰가 실행 도중 사용자의 요구로 분할되는 인터페이스를 의미하며, 전형적인 SDI 형식으로 뷰 클래스의 기본 클래스를 CHtmlView 클래스로 수정한다는 점에 유의해야 한다. 다음은 예제 소스다.
protected: // 컨트롤 모음이 포함된 멤버입니다.
CMFCMenuBar m_wndMenuBar;
CMFCToolBar m_wndToolBar;
CMFCStatusBar m_wndStatusBar;
CMFCToolBarImages m_UserImages;
CSplitterWnd m_wndSplitterWnd;
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
return m_wndSplitterWnd.Create(this, 2,2, CSize(1,1), pContext);
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}
void CDynSplitDemoView::OnInitialUpdate()
{
CHtmlView::OnInitialUpdate();
Navigate2(_T("C:\\"),NULL,NULL);
}
정적 분할 윈도우
정적 분할 윈도우는 아예 분할된 채로 응용 프로그램이 실행되도록 할 때 유용하며, 이렇게 분할된 각 패인에 들어가는 뷰 윈도우를 각기 다른 뷰 윈도우로 생성하여 붙일 수 있다. 중요하므로 코드 작성 순서와 의미를 파악할 것.
다음은 주요 코드다.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_wndSplitHor.CreateStatic(this, 1,2); //정적 분할 윈도우를 생성하는 함수, 메인프레임을 부모로 선언.
m_wndSplitHor.CreateView(0,0, RUNTIME_CLASS(CLeftListView), CSize(200,200), pContext); //뷰 윈도우를 적절한 패인에 생성하는 함수, 내부적으로 new 연산과 CreateWindow() 한다.
m_wndSplitVer.CreateStatic(&m_wndSplitHor, 2,1, WS_CHILD | WS_VISIBLE, m_wndSplitHor.IdFromRowCol(0,1)); //Hor를 부모로 선언.
m_wndSplitVer.CreateView(0,0, RUNTIME_CLASS(CTopHtmlView), CSize(100,300), pContext);
m_wndSplitVer.CreateView(1,0, RUNTIME_CLASS(CBottomEditView), CSize(200,100), pContext);
//중요한 점은 OnCreateClient() 함수를 호출하면 내부적으로 new 연산 후 CreateWindow() 함수가 호출되며, 이 과정에서
//RUNTIME_CLASS 매크로가 사용되는데, MFC에서는 이를 통해 임의로 정의되는 하위 클래스의 동적 생성을 지원한다.
//또한 특정 패인에 속한 뷰 윈도우의 주소를 알아내어 접근할 때는 CSplitterWnd::GetPane() 메소드를 사용해야 한다.
//AfxGetMainWnd() 함수가 최상위 메인 프레임 윈도우의 주소를 반환하므로 그 주소를 CMainFrame클래스로 캐스팅 한 후
//CSplitterWnd 클래스의 GetPane() 메서드를 이용하여 각 뷰 윈도우에 접근할 수 있다.
SetActiveView((CView*) m_wndSplitHor.GetPane(0,0));
return true;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
'Windows > MFC' 카테고리의 다른 글
스크롤 뷰 ( Scroll View ) (0) | 2011.11.19 |
---|---|
MDI 를 닮은 SDI (0) | 2011.11.19 |
Modal, Modeless 대화상자, 공용 대화상자 (0) | 2011.11.19 |
탭 컨트롤 (0) | 2011.11.18 |
드래그 앤 드롭 ( Drag-And-Drop) (0) | 2011.11.18 |