본문 바로가기
C & C++/MFC 컨트롤

[Dialog] 다중 뷰(Multiple View)

by izen8 2011. 4. 26.
반응형

정적 분할 윈도우는 분할된 채로 응용 프로그램이 실행된다.

정적 분할 윈도우를 만들어보자.

1.MFC 설정은 아래와 같이 한다.

2.프로젝트에 MFC 클래스 세 개를 등록한다.

클래스의 이름은 CLeftListView ,CTopHtmlView ,CBottomEditView 

순으로 하고 순서대로 형식을 CListView,CHtmlView,CEditView 순으로 한다

3.CMainFrame 클래스에 다음과 같이 CSplitterWnd 형 변수 2개를 추가한다.

class CMainFrame : public CFrameWnd
{
 
protected: // serialization에서만 만들어집니다.
 CMainFrame();
 DECLARE_DYNCREATE(CMainFrame)

// 특성입니다.
public:
 CSplitterWnd m_wndSplitHor;
 CSplitterWnd m_wndSplitver;

4.CMainFrame.cpp 에 아래와 같이 include 구문을 추가한다.

#include "LeftListView.h"
#include "TopHtmleView.h"
#include "BootomEditView.h"

5.CMainFrame 클래스에 OnCreateClient() 가상 함수를 재정의한 후 

다음과 같이 코드를 추가한다

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
 // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.

 //1.우선 첫 번쨰로 1행 2열로 윈도우를 정적 분할한다.
 if(!m_wndSplitHor.CreateStatic(this,1,2))
 {
  return false;
 }

 //2.첫 번째열 (0,0)에 해당하는 뷰 클래스를 붙인다.
 if(!m_wndSplitHor.CreateView(0,0,
  RUNTIME_CLASS(CLeftListView),CSize(200,200),pContext))
 {
  return false;
 }


 //3.두 번쨰 뷰를 다시 2행 1열로 정적 분할한다.
 if(!m_wndSplitver.CreateStatic(&m_wndSplitHor,2,1,
  WS_CHILD | WS_VISIBLE,
  m_wndSplitHor.IdFromRowCol(0,1)))


 //4.두 번째로 정적 분할된 왼도우에 첫 번째 뷰를 붙인다.
 if(!m_wndSplitver.CreateView(0,0,
  RUNTIME_CLASS(CTopHtmleView),CSize(100,300),pContext))
 {
  return false;
 }


 //5.두 번째로 정적 분할된 왼도우에 두 번쨰 뷰를 붙인다.
 if(!m_wndSplitver.CreateView(1,0,
  RUNTIME_CLASS(CBootomEditView),CSize(200,100),pContext))
 {
  return false;
 }

 

 //6.왼쪽의 뷰에 포커스를 준다.
 SetActiveView((CView*)m_wndSplitHor.GetPane(0,0));
 
 return true;

 //return CFrameWnd::OnCreateClient(lpcs, pContext);
}

 

6.CLeftListView 클래스에 WM_CREATE 시지 핸들러 함수를 등록해 다음과 같이 코드를 작성한다.

 

int CLeftListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CListView::OnCreate(lpCreateStruct) == -1)
  return -1;

 CListCtrl& List = GetListCtrl();


 List.InsertColumn(0,_T("Name"),LVCFMT_LEFT,200);
 List.InsertItem(0,_T("Park-Da-Sol"));


 List.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);

}

7.CTopHtmlView 클래스에 OnlnitialUpdate() 가상 함수를 재정의 하여 다음과 같은

코드를 추가하였을때 윈도우 탐색기 와 비슷하게 보여질수 있다.

 

void CTopHtmlView::OnInitialUpdate()
{
 CHtmlView::OnInitialUpdate();

 Navigate2(_T("c:\\"));

 // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
}

반응형

댓글