| 단계 | 설명 |
| 프로젝트 생성 | 대화상자로 프로젝트 생성하기
New Project-> Dialog based -> Finish
|
| TabControl 삽입 | 메인 다이얼로그에 TabControl을 삽입한다.
가끔 탭을 Multiline을 TRUE로 해놓으면 첫번째 다이얼로그가 지워지기도 한다. 또 GroupBox을 사용할때 순서(Order)가 TabCtrl보다 뒤에 있어야 가리지 않는다.
|
| 탭 다이얼로그 추가 | 1) 새 다이얼로그를 추가한다.
2) 속성에서 스타일을 설정한다.
style->child, border->none
3) 다이얼로그에서 더블클릭하여 클래스마법사로 다이얼로그 클래스를 추가한다.
CTabDlg1 클래스를 생성한다. CTabDlg2 클래스를 생성한다. CTabDlg3 클래스를 생성한다.
첫 번째 다이얼로그 생성
두 번째 다이얼로그 생성
세 번째 다이얼로그 생성
|
| 탭 다이얼로그 선언 | TabCtrlExDlg.h 헤더파일에 세 개의 다이얼로그를 선언한다.
#include "TabDlg1.h" #include "TabDlg2.h" #include "TabDlg3.h"
CTabDlg1 *m_pTabDlg1; CTabDlg1 *m_pTabDlg2; CTabDlg1 *m_pTabDlg3;
|
| OnInitDialog() 함수 | TabCtrlExDlg.cpp 소스에 다음을 추가한다.
CTabCtrl *tab = (CTabCtrl*)GetDlgItem(IDC_TAB1); //탭콘트롤을 얻어옴 CRect rect; TC_ITEM item; item.mask = TCIF_TEXT; item.pszText = L"첫번째"; tab->InsertItem(0, &item);
// 첫번째 대화상자 생성 m_pTabDlg1 = new CTabDlg1; m_pTabDlg1->Create(IDD_DIALOG1, tab); m_pTabDlg1->GetWindowRect(&rect); m_pTabDlg1->MoveWindow(5, 25, rect.Width(), rect.Height()); m_pTabDlg1->ShowWindow(SW_HIDE); //대화 상자 숨기기
// 두번째 대화상자 생성 m_pTabDlg2 = new CTabDlg2; m_pTabDlg2->Create(IDD_DIALOG2, tab); m_pTabDlg2->GetWindowRect(&rect); m_pTabDlg2->MoveWindow(5, 25, rect.Width(), rect.Height()); m_pTabDlg2->ShowWindow(SW_HIDE); //대화 상자 숨기기
// 세번째 대화상자 생성 m_pTabDlg3 = new CTabDlg3; m_pTabDlg3->Create(IDD_DIALOG3, tab); m_pTabDlg3->GetWindowRect(&rect); m_pTabDlg3->MoveWindow(5, 25, rect.Width(), rect.Height()); m_pTabDlg3->ShowWindow(SW_HIDE); //대화 상자 숨기기
//첫번째 탭에 포커스 tab->SetCurSel(0);
//첫번째 대화 상자를 보이게 m_pTabDlg1->ShowWindow(SW_SHOW); |
TCN_SELCHANGING
이벤트 추가 | Tab Control에서 탭 선택이 변할때의 Even 추가하여 이전 대화상자를 감춘다.
void CTabCtrlExDlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult) { CTabCtrl *tab = (CTabCtrl*)GetDlgItem(IDC_TAB1); // 탭 컨트롤의 포인터를 얻어옴 int nTab = tab->GetCurSel(); // 선택 되기 이전의 탭의 번호를 얻어옴
switch (nTab) // 선택되기전의 탭의 대화 상자를 않보이게 함 { case 0: m_pTabDlg1->ShowWindow(SW_HIDE); break; case 1: m_pTabDlg2->ShowWindow(SW_HIDE); break; case 2: m_pTabDlg3->ShowWindow(SW_HIDE); break; } *pResult = 0; } |
TCN_SELCHANGE
이벤트 추가 | Tab Control에서 탭 선택이 변했을 때의 Even 추가하여 현재 대화상자를 보여준다.
void CTabCtrlExDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) { CTabCtrl *tab = (CTabCtrl*)GetDlgItem(IDC_TAB1); // 탭컨트롤 포인터 얻어옴 int nTab = tab->GetCurSel(); // 현재 선택한 탭의 값을 얻어옴
switch (nTab) // 선택한 탭의 대화 상자를 보이게함 { case 0: m_pTabDlg1->ShowWindow(SW_SHOW); break; case 1: m_pTabDlg2->ShowWindow(SW_SHOW); break; case 2: m_pTabDlg3->ShowWindow(SW_SHOW); break; }
*pResult = 0; } |