728x90
반응형

1. 부모(메인) 다이얼로그 열기

2. 도구 상자 -> Tab Control열기

3. button1, 2를 만들어서 부모(메인) 다이얼로그 표시하기

4. button1에 Message Box 만들기

* Tabl1, 2, 3일때 다이얼로그 처리

5. Dialog1 생성 (자식1 다이얼로그)

6. 속성에서 Border을 클릭해본다.(None으로 설정)

7. 속성에서 Style을 클릭해본다.(Child로 설정)

8. button1을 생성하여 좌측 중간에 놓고 이름을 Tab1Dialog로 변경한다.

* 다이얼로그가 새로 만들어졌다는 것은 새로운 클래스가 필요하다는 것이다.

9. 우클릭-> 클래스추가 -> CDialog1(h 및 cpp는 C없이 작성)

10. button1(Tab1Dialog)을 더블클릭하여 MessageBox 생성

11. Dialog2 생성 (자식2 다이얼로그)

12. 속성에서 Border을 클릭해본다.(None으로 설정)

13. 속성에서 Style을 클릭해본다.(Child로 설정)

14. button1을 생성하여 중앙에 놓고 이름을 Tab2Dialog로 변경한다.

15. 우클릭-> 클래스추가 -> CDialog2(h 및 cpp는 C없이 작성)

16. button1(Tab2Dialog)을 더블클릭하여 MessageBox 생성

17. Dialog3 생성 (자식3 다이얼로그)

18. 속성에서 Border을 클릭해본다.(None으로 설정)

19. 속성에서 Style을 클릭해본다.(Child로 설정)

20. button1을 생성하여 우측 중간에 놓고 이름을 Tab3Dialog로 변경한다.

21. 우클릭-> 클래스추가 -> CDialog3(h 및 cpp는 C없이 작성)

22. button1(Tab3Dialog)을 더블클릭하여 MessageBox 생성

23. 부모 다이얼로그에서 우클릭-> 클래식 마법사 추가 -> 가상함수 -> OnInitDialog 추가

((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(0, L"탭 0");
((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(1, L"탭 1");
((CTabCtrl*)GetDlgItem(IDC_TAB1))->InsertItem(2, L"탭 2");

24. 메인 h에서 아래 내용 입력

public:
CDialog* m_TabDlg[3];

25. 메인 cpp로 와서 OnInitDialog함수에 아래와 같은 내용 입력

// 다이얼로그 객체 생성
m_TabDlg[0] = new CDialog1;
m_TabDlg[1] = new CDialog2;
m_TabDlg[2] = new CDialog3;

* 오류가 난다면 헤더파일 입력 하지않은 것을 의심

#include "Dialog1.h"
#include "Dialog2.h"
#include "Dialog3.h"

26. UI와 객체를 연결 (바로 아래 작성)

m_TabDlg[0]->Create(IDD_DIALOG1, (CTabCtrl*)GetDlgItem(IDC_TAB1));
m_TabDlg[1]->Create(IDD_DIALOG2, (CTabCtrl*)GetDlgItem(IDC_TAB1));
m_TabDlg[2]->Create(IDD_DIALOG3, (CTabCtrl*)GetDlgItem(IDC_TAB1));

27. 변수 설정

CRect TabDlgRect, ItemRect;
for (int i = 0; i < 3; i++)
{
	// 0, 0, 543, 354 (그림판으로 대충 size 측정)
	m_TabDlg[i]->GetClientRect(&TabDlgRect);

	// 2(Left), 2(Top), 44(Right), 21(Bottom)
	((CTabCtrl*)GetDlgItem(IDC_TAB1))->GetItemRect(i, &ItemRect);
	int x1 = TabDlgRect.left; // 2
	int y1 = ItemRect.bottom; // 21
	// 464 - 2 -1;
	int x2 = TabDlgRect.right;
	// 286 -21
	int y2 = TabDlgRect.bottom;

	// 위치 시키는 함수(SetWindowPos)
	m_TabDlg[i]->SetWindowPos(
		&wndTop, // 내부 전역변수
		x1, y1, x2, y2,
			SWP_SHOWWINDOW);
}

28. 0번에 대해서 보여줘라(ShowWindow)

m_TabDlg[0]->ShowWindow(SW_SHOW);

29. 부모(메인) 다이얼로그 -> 속성 -> 번개모양(TCN_SELCHANGE) 생성

void CMy0127Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	int num = ((CTabCtrl*)GetDlgItem(IDC_TAB1))->GetCurSel();
	CString s;
	s.Format(L"1 : %d", num);
	MessageBox(s, MB_OK);
	m_TabDlg[num]->ShowWindow(SW_SHOW);


	*pResult = 0;
}

30. 메인 헤더에 들어가서 멤버면수 생성

31. 부모(메인) 다이얼로그 -> 속성 -> 번개모양(TCN_SELCHANGING) 생성

void CMy0127Dlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	int num = ((CTabCtrl*)GetDlgItem(IDC_TAB1))->GetCurSel();
	CString s;
	s.Format(L"1 : %d", num);
	MessageBox(s, MB_OK);
	m_TabDlg[num]->ShowWindow(SW_HIDE);
	*pResult = 0;
}

*** 자식 다이얼로그가 화면에 나오지 않으면 위치 재수정

 

728x90
반응형

+ Recent posts