탭 컨트롤은 단독으로 사용하지 않고 여러 대화 상자와 연동하여 사용하는 컨트롤 윈도우이다. 여러 윈도우가 똑같은 위치에 겹겹이 중복되어 있을 때 필요한 윈도우만 화면에 보이게 하는 것이 탭 컨트롤의 주요 기능이다. 기본적으로 탭 컨트롤 이외에 같은 크기의 여러 윈도우가 필요하며, 대화 상자를 이용할 때는 대화 상자를 여럿 만들어야 한다. 다음은 예제 소스다.
리스트컨트롤과 굉장히 유사하다.


--------------헤더파일--------------------------------------

// 생성입니다.
public:
 CTabDemoDlg(CWnd* pParent = NULL); // 표준 생성자입니다.

 CFormOne  m_formOne;
 CFormSecond  m_formSecond;
 CFormThird  m_formThird;
 CWnd*   m_pwndShow;




--OnInitDialog()-----------------------------------------------

 CBitmap Bmp;
 Bmp.LoadBitmap(IDB_TabImageList);
 
 static CImageList ImgList;
 ImgList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 7, 0);
 ImgList.Add(&Bmp, RGB(192, 192, 192));
 m_Tab.SetImageList(&ImgList);

 CString strTmp = _T("");
 for(int i = 0; i < 7; i++)
 {
  strTmp.Format(_T("%dth Tab"), i);
  m_Tab.InsertItem(i, strTmp, i);
 }

 CRect Rect;
 m_Tab.GetClientRect(&Rect);

 m_formOne.Create(IDD_Form_One, &m_Tab);
 m_formOne.SetWindowPos(NULL, 5, 25,
     Rect.Width() - 10, Rect.Height() - 30,
     SWP_SHOWWINDOW | SWP_NOZORDER);
 m_pwndShow = &m_formOne;

 m_formSecond.Create(IDD_Form_Second, &m_Tab);
 m_formSecond.SetWindowPos(NULL, 5, 25,
     Rect.Width() - 10, Rect.Height() - 30,
     SWP_NOZORDER);

 m_formThird.Create(IDD_Form_Third, &m_Tab);
 m_formThird.SetWindowPos(NULL, 5, 25,
     Rect.Width() - 10, Rect.Height() - 30,
     SWP_NOZORDER);




void CTabDemoDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
 if(m_pwndShow != NULL)
 {
  m_pwndShow->ShowWindow(SW_HIDE);
  m_pwndShow = NULL;
 }

 int nIndex = m_Tab.GetCurSel();
 switch(nIndex)
 {
 case 0:
  m_formOne.ShowWindow(SW_SHOW);
  m_pwndShow = &m_formOne;
  break;

 case 1:
  m_formSecond.ShowWindow(SW_SHOW);
  m_pwndShow = &m_formSecond;
  break;

 case 2:
  m_formThird.ShowWindow(SW_SHOW);
  m_pwndShow = &m_formThird;
  break;
 }

 *pResult = 0;
}



----------------------------------------------------------------------------

+ Recent posts