www.pudn.com > ftpserversrc.rar > TabCtrlEx.cpp


 
#include "stdafx.h" 
#include "resource.h" 
#include "TabCtrlEx.h" 
 
#include "TabOne.h" 
#include "TabTwo.h" 
#include "TabThree.h" 
#include "TabFour.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
CTabCtrlEx::CTabCtrlEx() 
{ 
	m_tabPages[0]=new CTabOne; 
	m_tabPages[1]=new CTabTwo; 
	m_tabPages[2]=new CTabThree; 
	m_tabPages[3]=new CTabFour; 
 
	m_nNumberOfPages = 4; 
 
	SetBkColor(RGB(192, 192, 192)); 
	SetTextColor(RGB(0, 0, 0)); 
} 
 
 
CTabCtrlEx::~CTabCtrlEx() 
{ 
	for(int nCount=0; nCount < m_nNumberOfPages; nCount++) 
	{ 
		delete m_tabPages[nCount]; 
	} 
} 
 
 
void CTabCtrlEx::Init() 
{ 
	InsertItem(0, "Service"); 
	InsertItem(1, "Dag"); 
	InsertItem(2, "Details"); 
	InsertItem(3, "Connections"); 
 
	m_tabCurrent=0; 
 
	m_tabPages[0]->Create(IDD_TAB_ONE, this); 
	m_tabPages[1]->Create(IDD_TAB_TWO, this); 
	m_tabPages[2]->Create(IDD_TAB_THREE, this); 
	m_tabPages[3]->Create(IDD_FAB_FOUR, this); 
	 
	m_tabPages[0]->ShowWindow(SW_SHOW); 
	m_tabPages[1]->ShowWindow(SW_HIDE); 
	m_tabPages[2]->ShowWindow(SW_HIDE); 
	m_tabPages[3]->ShowWindow(SW_HIDE); 
 
	SetRectangle(); 
} 
 
 
void CTabCtrlEx::SetRectangle() 
{ 
	CRect tabRect, itemRect; 
	int nX, nY, nXc, nYc; 
 
	GetClientRect(&tabRect); 
	GetItemRect(0, &itemRect); 
 
	nX=itemRect.left; 
	nY=itemRect.bottom+1; 
	nXc=tabRect.right-itemRect.left-1; 
	nYc=tabRect.bottom-nY-1; 
 
	m_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW); 
	for(int nCount=1; nCount < m_nNumberOfPages; nCount++) 
	{ 
		m_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW); 
	} 
} 
 
BEGIN_MESSAGE_MAP(CTabCtrlEx, CTabCtrl) 
	//{{AFX_MSG_MAP(CTabCtrlEx) 
	ON_WM_LBUTTONDOWN() 
	ON_WM_SIZE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTabCtrlEx message handlers 
 
void CTabCtrlEx::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	CTabCtrl::OnLButtonDown(nFlags, point); 
 
	if(m_tabCurrent != GetCurFocus()) 
	{ 
		m_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE); 
		m_tabCurrent=GetCurFocus(); 
		m_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW); 
		m_tabPages[m_tabCurrent]->SetFocus(); 
	} 
} 
 
 
void CTabCtrlEx::OnSize(UINT nType, int cx, int cy)  
{ 
	CTabCtrl::OnSize(nType, cx, cy); 
 
	CRect rect; 
	RECT rcTab; 
 
	GetWindowRect(rect); 
	ScreenToClient(rect); 
	 
	GetItemRect(0, &rcTab); 
 
	int dx = 2 * GetSystemMetrics(SM_CXEDGE); 
	int dy = 2 * GetSystemMetrics(SM_CYEDGE); 
 
	for(int nCount=0; nCount < m_nNumberOfPages; nCount++) 
	{ 
		m_tabPages[nCount]->SetWindowPos(NULL, 0, 0, rect.Width() - (2 * dx), rect.Height() - (2 * dy) - (rcTab.bottom - rcTab.top), SWP_NOMOVE | SWP_NOZORDER);; 
	} 
}