다중뷰


— HTML 제목을 설정한다. 이 내용은 검색시 목록상에 나타나게 된다. —— –한글이 안보일 경우 charset=enu-kor 인지 확인 <META content="MSHTML 6.00.2715.400" name=GENERATOR>다음 내용은 후배들을 위해서 만든 강좌의 일부를 가져온 것입니다. 강좌를 .chm 파일로 만들고 있죠. 그중 다중뷰 제어에 대한 한 페이지만을 가져왔습니다. 쓸데없는 내용도 포함되어 있을지도 모르나 다중뷰 제어에 곤란을 느끼는 사람들에게는 유용하리라고 보여집니다.

다중뷰를 생성해서 제어하는 방법은 다양하게 존재합니다. 다음의 내용은 그 중에서도 필요한 뷰를 모두 등록한 연후에 필요한 시점에 Show & Hide 하는 방법으로 제어를 하고 있습니다. 기존의 존재하는 예제들을 살펴보면 스위칭 하는 시점에서 생성한 후 App가 소멸하는 시점에 같이 소멸되도록 설계가 되어 있습니다만, 아래와 같이 InitInstance 과정에서 필요한 모든 뷰를 등록하고 스위칭을 하는 것도 괜찮은 방법이라고 생각이 됩니다. 그리고 폼뷰만이 아닌 일반 뷰들도 스위칭 하는데 있어 아무런 불편이 없습니다. 물론 아래의 코드는 현재 리소스 ID에 의해서 스위칭을 하고 있지만, 내부에서 사용된 FindView(CRuntimeClass *pClass)와 같이 SwitchView(CRuntimeClass *pClass) 형태로 수정해서 사용하시면 리소스 ID를 몰라도 원하는 뷰를 찾아서 Show할 수 있게 됩니다.

그럼 고생하시구요…. 이만…

— Top Image ——

사용자 삽입 이미지

–내용 시작

———–

———
—— 페이지의 제목을 입력한다 ——–

단일 다큐먼트 & 다중 뷰 

리소스 편집기에서 IDD_VIDEO_FORM을 복사해서 IDD_TAPE_FORM 과  IDD_CLIENT_FORM을 생성한다. 그리고 각각의 폼 내부의 기본으로 제공된 CStatic 컨트롤 상에 표현된 내용을 "기본 폼 뷰", "테입 폼 뷰", "고객 폼 뷰"라는 내용으로 변경한다.

새로 생성한 IDD_TAPE_FORM 리소스을 더블 클릭한 후(리소스 편집 상태에서) Ctrl+W를 누르면 클래스 위저드가 나타나고 새로은 클래스를 추가할 것인지 여부를 묻는 대화 창이 다음과 같이 나타난다.

—-
—–

사용자 삽입 이미지

그냥 엔터를 치면 다음과 같은 클래스 명과 상속 받을 클래스 개체를 선택하는 대화 창이 나타난다.

사용자 삽입 이미지

화면에서와 같이 CFormView를 선택하도록 한다.

IDD_CLIENT_FORM 리소스에 대해서도 위와 같이 클래스를 생성한다.(CClientView)

해당 뷰 헤더를 편집 모드로 들어가서 Protected: 쪽에 있는 생성자들을 Public: 쪽으로 옮긴다. 동적으로 생성하기 위해서는 생성자가 Protected 영역에 있으면 컴파일 에러가 발생하므로 필히 옮겨야 한다.

사용자 삽입 이미지

위에서 보듯이 생성자의 위치를 다음과 같이 putlic쪽으로 옮긴다.

사용자 삽입 이미지

 

단일 다큐먼트 구조에 다중 뷰가 될 수 있는 이유는 다음과 같다.

CDocument 클래스 멤버 함수 중에 AddView라는 함수가 있다. 즉, 하나의 다큐먼트 내에는 여러개의 뷰가 등록되어 사용될 수 있는 구조를 이미 내재하고 있다는 뜻이다.

VideoApp.cpp에 필요한 뷰의 헤더들을 Include 한 후 InitInstance 함수의 끝자락에 다음과 같이 기술한다.

사용자 삽입 이미지

이 과정을 통해서 필요한 폼 뷰가 생성되어서 다큐먼트에 내장되었다. 다음은 메뉴에 이 뷰들에 대한 연결 고리를 만들고 뷰들을 스위칭 하는 코드를 기술하도록 한다.(참고 : 위에서 사용된 AFX_IDW_PANE_FIRST 값은 내장된 값으로 AFX_IDW_PANE_LAST까지 총 256개의 값을 사용할 수 있도록 정의되어 있다.)

리소스 편집기에서 IDR_MAINFRAME를 더블 클릭한 후 다음과 같이 메뉴들을 추가한다.

사용자 삽입 이미지

각각의 속성은 다음과 같다.
ID_MANAGEMENT_CLIENT    고객관리(&C)
ID_MANAGEMENT_TAPE       테입관리(&T)
ID_MANAGEMENT_RENT       대여관리(&R)

클래스 위저드를 통해서 각각의 메뉴에 대해서 CMainFrame 쪽에 함수들을 연결한다.

사용자 삽입 이미지

위와 같이 선택한 후 Add Function을 통해서 함수를 메뉴와 연결한다.

그럼 다음과 같이 MainFrame.cpp에 생성이 된다. 그런 연후 필요한 코드를 기술한다.

사용자 삽입 이미지

SwitchForm이란 함수를 호출하는 것이 보일 것이다. 클래스 뷰 탭에서 CMainFrame을 선택한 후 마우스 우측 버튼을 클릭하면 다음과 같이 팝업 메뉴가 나타나고 Add Member Function 메뉴를 선택해서 필요한 함수를 추가한다. 그럼 자동으로 .h와 .cpp에 자동 생성된다. 그런 연후 생성된 함수에 내용을 기술하면 된다.

사용자 삽입 이미지

사용자 삽입 이미지

위의 인터페이스를 활용해서 다음의 함수들을 추가한다.

Function Type

Function Declaration

voidSwitchForm(int nForm)
CView *FindView(CRuntimeClass *pClass)

그런후 함수 내부에 다음과 같이 기술한다.

사용자 삽입 이미지

사용자 삽입 이미지

이제 컴파일을 수행한 후 테스트를 해보자. 그럼 관리 메뉴를 통해서 다음과 같이 뷰가 바뀌는 것을 볼 수 가 있다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

— 상세 내용을 입력한다 ———내용 끝– CopyRight Image——

답글 남기기

이메일 주소는 공개되지 않습니다.