Presentation is loading. Please wait.

Presentation is loading. Please wait.

분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.

Similar presentations


Presentation on theme: "분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일."— Presentation transcript:

1 분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일

2 contents 분할 윈도 다중 뷰

3 자기 위에 두개 이상의 view를 생성시키고 분할 바를 이용하여 뷰의 크기 조절
분할 윈도 (1/11) 프레임윈도우 분할윈도우 자기 위에 두개 이상의 view를 생성시키고 분할 바를 이용하여 뷰의 크기 조절 CSplitterWnd 클래스 뷰 윈도우 뷰 윈도우 분할 바 프레임 윈도, 분할 윈도, 뷰 윈도의 관계

4 분할 윈도 (2/11) 분할 윈도 설정 ExSpliterWnd (1/3)
AppWizard  Step 4/6 Advanced (Window Styles: Use split window) Click!

5 분할 윈도 (3/11) 분할 윈도 설정 ExSpliterWnd (2/3)

6 분할 윈도 (4/11) 분할 윈도 설정 ExSpliterWnd (3/3) 자동으로 생성된 CMainFrame Code
MainFrame.h 분할 윈도우를 생성할 윈도우의 포인터 MainFrame 포인터 MainFrame.cpp

7 분할 윈도 (5/11) 정적 분할 윈도 (Static Split Window) (1/2)
CSplitterWnd 클래스의 멤버 함수인 CreateStatic 함수 이용 CreateStatic을 이용하여 가로로 두 개의 분할 윈도 생성 CSplitterWnd::CreateStatic BOOL CreateStatic( CWnd* pParentWnd, // 부모 윈도 핸들 Int nRows, // 세로칸 Int nCols, // 가로칸 DWORD dwStyle = WS_CHILD | WS_VISIBLE, // 윈도 스타일 UINT nID = AFX_IDW_PANE_FIRST // 분할 윈도 ID ); m_WndSplitter.CreateStatic(this, 1, 2); // 정적으로만 분할

8 분할 윈도 (6/11) 정적 분할 윈도 (Static Split Window) (2/2)
분할 윈도에 특정 윈도를 설정하기 위해 CreateView 함수 사용 CExStaticSplitView 클래스를 현재 분할된 윈도 좌측에 설정하는 방법 CSplitterWnd::CreateView virtual BOOL CreateView(int row, int col, CRuntimeClass* pViewClass, SIZE sizelnit, CCreateContext* pContext); m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CExStaticSplitView), CSIZE(100, 100), pContext);

9 분할 윈도 (7/11) 정적 분할 윈도 예제 ExStaticSplit
1) FormView 형태의 CAnotherView 만든다. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext { 2) m_wndSplitter.CreateStatic(this,1,2); 3) m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CExStaticSplitView), Csize(100,100),pContext); 4) m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CAnotherView), Csize(160,100),pContext); return TRUE; }

10 분할 윈도 (8/11) 분할 윈도의 각 View 윈도 클래스 접근
ExStaticSplit에서 CFormView나 CView 윈도를 얻고자 할 때 1) CDocument pDoc=AfxGetMainWnd()->GetActiveDocument(); 2) POSITION pos=pDoc->GetFirstViewPosition; 3) Cview *pView=pDoc->GetNextView(pos); 4) CFormView *pView2=pDoc->GetNextView(pos);

11 분할 윈도 (9/11) View 윈도 클래스 접근 예제 ExSplitCont (1/3)

12 분할 윈도 (10/11) View 윈도 클래스 접근 예제 ExSplitCont (2/3)
SetTimer(1,500,NULL); 5) 6) 7) 1) class CExSplitContView : public Cview//m_nNum=1 8) 2) class CAnotherView1 : public Cview//m_nNum=2 3) class CAnotherView2 : public Cview//m_nNum=3 9) 4) class CAnotherView2 : public Cview//m_nNum=4 10)

13 분할 윈도 (11/11) View 윈도 클래스 접근 예제 ExSplitCont (3/3)
// 1)번 분할 윈도에 출력할 View의 OnDraw void CExSplitContView::OnDraw(CDC* pDC) { CExSplitContView* pDoc=GetDocument(); ASSERT_VALID(pDoc); Cstring date=“main”; pDC->TextOut(0,0,date); } // 2)번 분할 윈도에 출력할 View의 OnDraw void CAnotherView1::OnDraw(CDC* pDC) CDoument* pDoc= GetDocument(); //TODO: add draw code here Cstring date=“View1”; // 3)번, 4번 분할 윈도에 출력할 View의 OnDraw void CAnotherView2::OnDraw(CDC* pDC) Cstring date=“View2”;

14 다중 View (1/2) 다중 View 만들기 2) //메인뷰를 활성화 한다.
SetActiveView(m_pMainView); //OtherView를 감춘다. m_pOtherView->ShowWindow(SW_HIDE); //메인 View를 보여준다. m_pMainView->ShowWindow(SW_SHOW); //메인 View를 첫번째 윈도우로 설정한다. m_pMainView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); 1) 다른 view 만들기 //OtherView를 만들고 4) m_pOtherView=new CAnotherView; CCreateContext context; //현재 View의 도큐먼트를 받는다. 5) context.m_pCurrentDoc=m_pMainView->GetDocument(); //View를 만든다. m_potherView->Create(NULL,NULL,0L,CFrameWnd:: rectDefault,this,2,&context); //화면에 업데이트 한다. m_pOtherView->OnInitialUpdate() 3) //OtherView를 활성화 시킨다. SetActiveView(m_pOtherView); //OtherView를 보여준다. m_pOtherView->ShowWindow(SW_SHOW); //메인 View를 감춘다. m_pMainView->ShowWindow(SW_HIDE); //OtherView를 첫번째 PANE로 설정한다. 6) m_pOtherView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();

15 다중 View (2/2) 다중 View 예제 ExMultiView (1/2)
2) CView 항목을 선택하면 (ID:ID_ANOTHERVIEW) CMainFrame의 OnAnotherview()가 실행되며 이 함수에 새로운 View가 만들어지지 않았으면 만든 다.( 과정 1) ) 만일 View가 만들어졌다면 단순 하게 새로 만든 View를 화면에 출력한다. (  과정 3) ) 1) CFormView 메뉴를 선택하면 (ID:ID_MAINVIEW) CMainFrame의 OnMainview()가 실행되고, 이 함 에서는 기본적으로 설정된 View가 화면에 출력된 다.  과정 2)

16 다중 View (2/2) 다중 View 예제 ExMultiView (2/2) 헤더에 두개의 변수 설정 과정 2)
void CMainFrame::OnAnotherview() { //현재 활성화 되어있는 View가 메인 View이므로 //m_pMainView에 설정한다. m_pMainView =(CExMultiViewView *) GetActiveView(); //OtherView가 만들어 지지 않았다면 if (m_pOtherView == NULL) //OtherView를 만들고 m_pOtherView = new CAnotherView; CCreateContext context; //현재View의 토큐먼트를 받는다. context.m_pCurrentDoc = m_pMainView->GetDocument(); //View를 만든다. m_pOtherView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, 2, &context); //화면에 업데이트한다. m_pOtherView->OnInitialUpdate(); } //OtherView를 활성화 시킨다. SetActiveView(m_pOtherView); //OtherView를 보여준다. m_pOtherView->ShowWindow(SW_SHOW); //메인 View를 감춘다. m_pMainView->ShowWindow(SW_HIDE); //OhterView를 첫번째 PANE로 설정한다. m_pOtherView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); CExMultiViewView *m_pMainView; CAnotherView *m_pOtherView; m_pOtherView=NULL; 과정 1) void CMainFrame::OnMainview() { //메인뷰를 활성화 한다. SetActiveView(m_pMainView); //OtherView를 감춘다. m_pOtherView->ShowWindow(SW_HIDE); //메인 View를 보여준다. m_pMainView->ShowWindow(SW_SHOW); //메인 View를 첫번째 윈도우로 설정한다. m_pMainView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); }


Download ppt "분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일."

Similar presentations


Ads by Google