반응형
[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);
이제 상단 탭 목록을 누르더라도 탭 포커싱이 현재 탭으로 고정되므로 바뀌지 않는다.
끝.
반응형