본문 바로가기

MFC

[MFC] 버튼클릭으로 탭 전환하기 + 상단 탭 목록 잠그기

반응형

[MFC] 버튼클릭으로 탭 전환하기

[메인다이얼로그]
1. 탭 컨트롤 변수 선언 (m_KingTab)
2. 각각의 탭 컨트롤 변수 선언 (m_tab1, m_tab2, ... )
3. 탭 연동
4. 현재 탭 저장할 탭 포인터 변수 선언 (m_pwndShow)

 

탭 입장에선 부모는 tab control이고 한번 더 부모를 타면 MainDlg 일 것이다.

버튼이 있는 탭에서 버튼에 대한 함수를 아래와 같이 정의한다.

void Tab1::OnBnClickedButtonNext()
{
	//TODO: Add your control notification handler code here
    	//tab1의 부모는 tabControl임. 한번 더 부모를 가져와야 CYourMainDlg.
	CYourMainDlg* pMainDlg = (CYourMainDlg*)GetParent()->GetParent();
	
    	//현재 보여지는 탭 숨기고
	pMainDlg->m_pwndShow->ShowWindow(SW_HIDE);
	pMainDlg->m_pwndShow = NULL;
	
    	//상단의 탭 목록 포커싱 변경하고
	pMainDlg->m_KingTab.SetCurFocus(1);

	//보여줄 탭 보여줌.
	pMainDlg->m_tab2.ShowWindow(SW_SHOW);
	pMainDlg->m_pwndShow = &pMainDlg->m_tab2;
}

다른 건 그냥 현재 탭 숨기고 / 보이고 싶은 탭 보이고 / 현재 탭을 담는 m_pwndShow 변수를 변경하는 단순한 화면 전환이고,

 

pMainDlg->m_KingTab.SetCurFocus( 탭 아이템 번호 );

를 통해 상단의 탭 목록 포커싱을 바꾼다.

 

이로써 버튼 클릭을 통한 탭 전환 구현은 끝이다. 버튼으로도 넘길 수 있고 탭 목록 선택해서도 넘길 수 있도록 구현이 목적이라면 이렇게 사용하면 된다.

 


상단 탭 목록 잠그기

탭을 넣었으나, 버튼을 통해서만 탭을 전환시키고자 한다면 Tab 목록을 눌렀을 때를 처리하는 함수를 정의해야지.

 

1. MainDlg에 현재 탭 ItemNum을 저장할 int 변수 하나를 선언하고 0으로 초기화 한다. (m_curTab)

(탭 itemNum은 0부터 시작이다. / 즉, 첫번째 탭 : 0 / 두번째 탭 : 1 / 세번째 탭 : 2 / ... )

 

2. 버튼으로 tab 전환 시 m_curTab++  코드 추가.

 

3. 탭 목록을 눌렀을 때 함수처리 추가.

내용은 아래와 같이 정의한다.

void CYourMainDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here

	m_KingTab.SetCurFocus(m_curTab);
    
	*pResult = 0;
}
m_KingTab.SetCurFocus(m_curTab);

이제 상단 탭 목록을 누르더라도 탭 포커싱이 현재 탭으로 고정되므로 바뀌지 않는다.

 

끝.

반응형