C++/MFC

[MFC] Tab Control(탭 컨트롤) 사용방법

balabala 2021. 6. 21. 22:52
728x90
SMALL
1. 도구상자에서 Tab Control을 선택하고 다이얼로그에 넣은 후 ID를 정해준다. 

 

그림1. Tab Control

2. 리소스 뷰에서 각 탭의 화면으로 사용될 다이얼로그를 추가한다.

 

그림2. 리소스 추가
그림3. 다이얼로그 선태하고 새로 만들기 클릭

3. 이렇게 생성된 다이얼로그의 ID를 변경해주고, 스타일Popup→Child, 시스템메뉴 True→False, 제목 표시줄True→False로 변경해준다.

 

그림4. 다이얼로그 속성 수정

4. 다이얼로그의 속성을 수정했다면 클래스추가를 통해 해당 다이얼로그의 클래스(Class)를 추가해준다.

 

그림5. 클래스 추가
그림6. MFC 클래스 추가

5. 2~4번까지의 방법을 통해 탭에서 사용할 다이얼로그를 추가해준다. 본 예제에서는 4개를 사용할 예정이므로 4개를 추가한다.

 

그림7. 다이얼로그 및 클래스 추가완료(4개)

6. 다시 Tab Control이 생성된 다이얼로그로 돌아가서 클래스 마법사창을 띄운다.

 

그림8. 클래스 마법사

7. 클래스 마법사에서 멤버 변수 탭으로 이동한 후 만든 Tab Control에 제어 변수를 추가해준다. 

 

그림9. 멤버변수 탭
그림10. 변수 추가
그림11. 변수 추가 완료

8. 클래스마법사의 명령 탭으로 이동한 후 Tab Control의 ID를 선택하고 메세지 탭에서 TCN_SELCHANGE를 선택하고 처리기 추가 버튼을 눌러 메세지 함수를(이벤트) 추가한다.

 

그림12. 클래스 마법사 명령 탭
그림13. 멤버 함수 추가 창
그림14. 메세지 함수 추가 완료후 화면

SMALL
9. 이제 Tab Control이 있는 클래스의 헤더 파일로 이동해서 Tab Control의 화면으로 사용되기 위해 만들었던 클래스들을 모두 Include 해주고, 각 클래스의 변수를 만든다.

 

그림15. 헤더 파일 작업

#include "DlgTab1.h"
#include "DlgTab2.h"
#include "DlgTab3.h"
#include "DlgTab4.h"

CDlgTab1* dlg1;
CDlgTab2* dlg2;
CDlgTab3* dlg3;
CDlgTab4* dlg4;

 

10. 이번에는 소스파일로 이동해서 OnInitDialog(가상함수)에 밑의 코드를 추가해준다. 만약 가상함수가 없다면 클래스 마법사→가상함수 탭 클릭→OnInitDialog선택→함수 추가를 하면 된다.

 

그림16. OnInitDialog 코드 추가

    CRect rect;
    m_tab.GetWindowRect(rect);

    m_tab.InsertItem(0, "탭1"); // 탭의 이름 설정
    m_tab.InsertItem(1, "탭2");
    m_tab.InsertItem(2, "탭3");
    m_tab.InsertItem(3, "탭4");

    m_tab.SetCurSel(0);

    dlg1 = new CDlgTab1;
    dlg1->Create(IDD_DIALOG_TAB1, &m_tab);
    dlg1->MoveWindow(0, 20, rect.Width(), rect.Height());
    dlg1->ShowWindow(SW_SHOW); // 첫번째 Tab을 SHOW로 하고 나머지는 HIDE

    dlg2 = new CDlgTab2;
    dlg2->Create(IDD_DIALOG_TAB2, &m_tab);
    dlg2->MoveWindow(0, 20, rect.Width(), rect.Height());
    dlg2->ShowWindow(SW_HIDE);

    dlg3 = new CDlgTab3;
    dlg3->Create(IDD_DIALOG_TAB3, &m_tab);
    dlg3->MoveWindow(0, 20, rect.Width(), rect.Height());
    dlg3->ShowWindow(SW_HIDE);

    dlg4 = new CDlgTab4;
    dlg4->Create(IDD_DIALOG_TAB4, &m_tab);
    dlg4->MoveWindow(0, 20, rect.Width(), rect.Height());
    dlg4->ShowWindow(SW_HIDE);

 

11. 마지막으로 8번에서 추가했던 Tab Control의 TCN_SELCHANGE 메세지 함수에 다음과 같은 코드를 넣으면 된다.(본 예제에서 함수명은 OnSelchangeTabMain이다.)

 

그림17. Tab Control 메세지 함수 코드

    if (IDC_TAB_MAIN == pNMHDR->idFrom) { // Tab Control ID명
        int select = m_tab.GetCurSel();
        switch (select) {
        case 0:
            dlg1->ShowWindow(SW_SHOW);
            dlg2->ShowWindow(SW_HIDE);
            dlg3->ShowWindow(SW_HIDE);
            dlg4->ShowWindow(SW_HIDE);
            break;
        case 1:
            dlg1->ShowWindow(SW_HIDE);
            dlg2->ShowWindow(SW_SHOW);
            dlg3->ShowWindow(SW_HIDE);
            dlg4->ShowWindow(SW_HIDE);
            break;
        case 2:
            dlg1->ShowWindow(SW_HIDE);
            dlg2->ShowWindow(SW_HIDE);
            dlg3->ShowWindow(SW_SHOW);
            dlg4->ShowWindow(SW_HIDE);
            break;
        case 3:
            dlg1->ShowWindow(SW_HIDE);
            dlg2->ShowWindow(SW_HIDE);
            dlg3->ShowWindow(SW_HIDE);
            dlg4->ShowWindow(SW_SHOW);
            break;
        }
    }
 
12. 실행화면

 

728x90
LIST