본문 바로가기
Visual C++/General

FormView로 다중뷰 구현

by hyperhand 2009. 1. 29.

폼뷰를 생성하여 다중뷰를 구현할때는 접근성때문에 CView를 상속받은 뷰를 스위칭할때의 예제와는 다르게 약간 수정해야 한다.

 

---rc 탭 작업---

1. 리소스탭에서 폼뷰를 생성한다.

 

-- MyFormView 클래스 ---

2. FormView를 상속받아 MyFormView클래스를 만든다.

3. 클래스 위자드에서 Create를 오버라이드 한다.(public으로 선언된다)

4. MyFormView(UINT) 생성자를 하나더 만든다. (오버로딩)

5. 오버로딩한 생성자를 구현한다

 CMyFormView::CMyFormView(UINT id)
 : CFormView(id)
{
 //{{AFX_DATA_INIT(CMyFormView)
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
}

 

 

 


-- FormView1, FormView2 클래스 ----

6. FormView를 상속받아 FormView1, FormView2를 만든다.

7. #include 부분을 CMyFormView로 수정한다.

8. CMyFormView를 상속받은 걸로 고치기 위해 문자열 FormView를 CMyFormView로 replace한다.

(여기까지 MyFormView를 상속받은 것으로 고치기 위해 하는 작업)

9. 헤더에서 생성자의 접근지시자를 public으로 변경한다.

 

--- MainFrame 클래스 ----

10. MainFrame에 도큐먼트와 뷰들의 헤더를 인클루드하고 MyFormView 포인터 배열를 선언한다.

11. 이벤트 핸들러 함수를 MainFrame 내에 선언하고 뷰를 스위칭한다. 

 

FormView1,FormView2를 MyFormView를 상속받지 않고 바로 작업해줘도 되지만 MainFrame에서 폼뷰의 포인터를 받아서 다형성을 이용하여 함수를 호출하지 못하는 문제가 있다.

 

FormView의 Create함수가 protected로 선언되어 있기때문인데, 이를 해결하기 위해 FormView를 상속받은 MyFormView클래스에서는 Create를 public 으로 오버로딩하여 다시 MyFormView클래스를 상속받은 클래스는 MyFormView* 형 포인터로 FormView::Create 에 접근할수 있는 것을 이용하였다.

덧붙여 폼뷰의 생성자를 오버로딩함으로서 파생클래스에서 지정한 리소스로 폼뷰를 생성할수 있다.

반응형