1. 대화상자를 이용한 탭컨틀롤 사용을 알아보자.
2. 3개의 탭을 만들고 각각 대화상자를 붙여본다.
3. 3개의 대화상자를 모델리스형으로 만든다.
각각 CDlgTab1, CDlgTab2, CDlgTab3라고 하자.
4. 각각의 대화상자의 "Styles" 옵션중 "Style"은 "Child"로 "Border"는 "None"으로 "Tile Bar"는 언체크 한다.
5. 3개의 모델리스를 CMainFrame에 다음과 같이 선언하고
CDlgTab1 *m_pDlgTab1;
CDlgTab2 *m_pDlgTab2;
CDlgTab3 *m_pDlgTab3;
* 생성자에 NULL값으로 초기화 해주는 거와 소멸자에세 NULL이 아니면 delete해주는 거 있지 말자.
6. 탭컨트롤에 탭만들기. 이때 탭컨트롤 변수를 m_ctrTab라고 하자.
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = "탭1";
m_ctrTab.InsertItem(0, &item); // 첫번째 탭 생성
item.pszText = "탭2";
m_ctrTab.InsertItem(1, &item); // 두번째 탭 생성
item.pszText = "탭3";
m_ctrTab.InsertItem(2, &item); // 세번째 탭 생성
7. 각 탭에 붙여질 모델리스 만들기
// 일단 CMainFrame을 찾는다.
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
CRect rect;
// 첫번째 모델리스 생성
pFrame->m_pDlgTab1 = new CDlgTab1;
pFrame->m_pDlgTab1->Create(&m_ctrTab);
pFrame->m_pDlgTab1->GetWindowRect(&rect);
pFrame->m_pDlgTab1->MoveWindow(5,25, rect.Width(), rect.Height());
// 탭의 모양에 따라 모델리스를 위치 시킨다.
pFrame->m_pDlgTab1->ShowWindow(SW_HIDE);
// 두번째 모델리스 생성
pFrame->m_pDlgTab2 = new CDlgTab2;
pFrame->m_pDlgTab2->Create(&m_ctrTab);
pFrame->m_pDlgTab2->GetWindowRect(&rect);
pFrame->m_pDlgTab2->MoveWindow(5,25, rect.Width(), rect.Height());
pFrame->m_pDlgTab2->ShowWindow(SW_HIDE);
// 세번째 모델리스 생성
pFrame->m_pDlgTab3 = new CDlgTab3;
pFrame->m_pDlgTab3->Create(&m_ctrTab);
pFrame->m_pDlgTab3->GetWindowRect(&rect);
pFrame->m_pDlgTab3->MoveWindow(5,25, rect.Width(), rect.Height());
pFrame->m_pDlgTab3->ShowWindow(SW_HIDE);
8. 기본적으로 선택될 탭 설정과 탭에 보여줘야 할 모델리스 표시
// 기본적으로 선택될 탭 설정
m_ctrTab.SetCurSel(0);
// 선택된 탭에서 보여줄 대화상자 표시
pFrame->m_pDlgTab1->ShowWindow(SW_SHOW);
9. 탭 클릭에 따른 모델리스 표시 전환
// 탭이 변경 되는 중에 발생되는 메세지. TCN_SELCHANGING
int nTab = m_ctrTab.GetCurSel(); // 변경되기 전에 선택된 탭 번호
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
switch(nTab)
{
case 0:
pFrame->m_pDlgTab1->ShowWindow(SW_HIDE);
break;
case 1:
pFrame->m_pDlgTab2->ShowWindow(SW_HIDE);
break;
case 2:
pFrame->m_pDlgTab3->ShowWindow(SW_HIDE);
break;
}
// 탭이 변경 되고 난 후에 발생되는 메세지. TCN_SELCHANGE
int nTab = m_ctrTab.GetCurSel(); // 변경되고 난후에 선택된 탭 번호
CMainFrame *pFrame = (CMainFrame*) AfxGetMainWnd();
switch(nTab)
{
case 0:
pFrame->m_pDlgTab1->ShowWindow(SW_SHOW);
break;
case 1:
pFrame->m_pDlgTab2->ShowWindow(SW_SHOW);
break;
case 2:
pFrame->m_pDlgTab3->ShowWindow(SW_SHOW);
break;
}
* 탭변경전에 기존 모델리스를 감추고 탭변경후 변경된 위치의 모델리스를 표시하면 된다.
'My > works' 카테고리의 다른 글
[MFC] YCbCr <-> RGB 변환 (0) | 2012.12.26 |
---|---|
[C] 디렉토리(폴더)의 모든 파일을 제거 (0) | 2012.12.26 |
[C] rand 함수를 이용하여 난수(랜덤) 발생시키기 (0) | 2012.12.26 |
[MFC] 문자열 파싱하기 (5) | 2012.12.26 |
[MFC] 리스트컨트롤(List Control) 클릭한 곳의 index값 얻어오기 (0) | 2012.12.24 |
[MFC] 다이얼로그에 다이얼로그 붙이기 (1) | 2012.12.24 |
[C] return 0, return 1, return -1 의미 (0) | 2012.12.24 |
[MFC] Main Frame 핸들 얻어오기 (2) | 2012.12.24 |
[MFC] 자식 dialog에서 부모 dialog변수 및 함수 참조 (0) | 2012.12.24 |
[MFC] EnableWindow TRUE/FALSE (0) | 2012.12.24 |