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

[Tab] 탭 설정

by izen8 2011. 4. 28.
반응형

제작내용 : 툴을 위한 탭 설정하기

제작방법 : 3개의 Dialog(지형,텍스쳐,오브젝트)를 생성후에 ControlView에 Tap Control을 만들고

               생성된 3개의 Dialog와 연결시킵니다.

 

1. 다이알로그 생성하기(지형, 텍스쳐, 오브젝트)

리소스뷰를 선택후 Dialog를 오른쪽 버튼으로 클릭한후 Dialog 삽입을 누릅니다.

 


 

그럼 위의 사진 오른쪽처럼 Dialog가 생성됩니다.

생성된 Dialog를 클릭후 오른쪽 버튼을 눌러서 속성을 클릭합니다.

 

위의 사진에 파란색라인에 보이듯이 속성창이 보여집니다.

속성창에 ID를 선택후 IDD_DLG_MAP으로 ID를 변경합니다.

 

속성창의 Border와 Style의 내용을 변경합니다. 그럼 Dialog모양이 오른쪽 위처럼 바뀝니다.

 

Dialog창을 더블클릭하면 MFC 클래스 마법사가 생성되면서 클릭한 Dialog에 연결된

클래스를 생성하게 해줍니다.(앞으로 Dialog와 연결될 클래스를 이런식으로 생성합니다.)

대화상자 ID를 보면 IDD_DLG_MAP라고 써있는데 현재 클래스가 IDD_DLG_MAP Dialog와

연결된다는 뜻입니다.

클래스 이름에 CDlgMap을 쓰고 기본클래스를 CDialog 선택후 마침을 누릅니다.

 

이제는 위와 똑같은 방법으로 2개의 Dialog를 더 생성합니다. 총 3개의 Dialog를 생성합니다.
위와 같은 방법으로 2번째, 3번째 Dialog를 생성후 클래스까지 만듭니다.

1번째 Dialog : IDD_DLG_MAP(클래스 이름 : CDlgMap)

2번째 Dialog : IDD_DLG_TEXTURE(클래스 이름 : CDlgTexture)

3번째 Dialog : IDD_DLG_OBJECT(클래스 이름 : CDlgObject)


여기까지 마치면 왼쪽에 헤더파일과 소스파일이 생성되어 있습니다.

2. ControlView에 Tap control 만들기

 

 

리소스뷰를 선택 - IDD_CONTROLVIEW Dialog를 선택한 후에

오른쪽에 대화상자 편집기에서 Tap Control를 선택합니다.

그리고 위처럼 적당히 드래그를 하고 속성창에 ID를 IDC_TAP_EDITMENU라고 이름을 변경합니다.

 

Tap Control을 선택후 키보드 ctrl키를 누르고 마우스 왼쪽버튼을 더블클릭하면

멤버 변수 추가마법사가 나옵니다.

우리는 탭을 컨트롤 할 수 있게 control 변수로 m_ctrlTapEditMenu라고 이름을 적고

마침을 누릅니다.

솔루션 탐색기 - ControlView.h를 선택한 후 3개의 Dialog 클래스를 추가시킵니다.

 

 

ControlView가 초기에 생성될때 제일먼저 불러주는 함수 OnInitialUpdate함수를 재정의 합니다.

3번의 조그마한 아이콘이 재정의를 할 수 있는 클래스 위자드 입니다.(VC6.0의 클래스 위자드)

재정의된 OnInitialUpdate함수에 m_ctrlTapEditMenu(탭컨트롤)에 아이템을 추가시킵니다.

(0, "지형"), (1, "텍스쳐), (2, "오브젝트)

 

그리고 멤버변수에 m_pDlgMap, m_pDlgTexture, m_pDlgObject를 new로 메모리 할당후

Dialog->Create( Dialog ID, Tap Control 멤버변수)로 Tap Control과 연결합니다.

그리고 Dialog에 크기를 Rect로 얻어온 후에 적당한 위치에 MoveWindow를 합니다.

 

ShowWindow( SW_SHOW )를 초기에 지형만 보이게 지형만 SW_SHOW를 하고

나머지는 SW_HIDE로 설정합니다.

리소스 뷰에서 3개의 Dialog를 적당히 크기를 변경 시킵니다.

리소스뷰 - IDD_CONTROLVIEW 에 Tap Control을 선택후 속성창에

번개표시(이벤트)를 클릭하면 여러가지 Tap Control의 이벤트가 표시됩니다.

거기서 우리는 Tap Control을 변경(Change)할 경우에 이벤트를 주기위해서

TCN_SELCHANGE를 선택합니다.( TCN_SELCHANGING 아님)

 

솔루션 탐색기 - ControlView.cpp에 위에서 생성한 이벤트 함수가 보입니다.

이 이벤트 함수는 탭을 변경했을 때 불러지는 이벤트 함수 입니다.

int select = m_ctrlTapEditMenu.GetCurSel();

여기서 GetCurSel은 탭에 현재 선택된 탭번호를 알려줍니다.

(0, "지형"), (1, "텍스쳐"), (2, "오브젝트")이기 때문에 0, 1, 2중에 1개를 넘겨줍니다.

그후에 switch문을 통하여 지형일때 텍스쳐, 오브젝트 HIDE ... 등으로

선택된 자기만 보이게 하고 나머지 Dialog는 숨기게 설정을 합니다.

이제 생성된 Dialog를 해제 해주기 위해 클래스뷰 - CControlView - 메세지아이콘 -

WM_DESTROY 를 선택한 후에 생성된 함수에 Dialog를 해제해 줍니다.

 

완성된 모습입니다. 오른쪽에 탭이 보이죠 ^^

 

근데 왠지 좀 뭔가 안이뿐것 같아요.

그래서 XP스타일로 바꿔보겠습니다.

위와 같이 현재 진행하고 있는 Maptool 폴더에 res폴더를 확인해서 Maptool.manifest를

res폴더로 옮겨줍니다.

Resource.h 에 #define 1줄을 추가 시키고

Maptool.rc2를 메모장에서 부른뒤 위의 내용을 추가 시켜줍니다.

"res\\Maptool.manifest" 의 경로가 맞아야 합니다.

그래서 위에 res 폴더로 옮기라고 한것입니다.

자 드뎌 완성입니다. ~~ ^^

현재는 좀 썰렁해도 버튼 몇개만 올려도 XP스타일이라 이뿌게 나옵니다^^

이번엔 탭만 추가한건데 꽤 기네요 ㅠㅠ

 

최대한 비쥬얼하고 쉽게 설명해 놓았으니 필요한 분들은 많이 참고해 주세요^^

소스도 같이 올립니다

반응형

댓글