www.pudn.com > MyViewTab.rar > MyViewTab.cpp


// MyViewTab.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "MyViewTab.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMyViewTab 
 
CMyViewTab::CMyViewTab() 
{ 
	m_nCurrentTabPageItem = -1; 
} 
 
CMyViewTab::~CMyViewTab() 
{ 
	int nCount = m_PageArray.GetSize(); 
	void * pNode = 0; 
	for(int i=0;inItem = nItem; 
	pPageInfo->pPage = pPage; 
	pPageInfo->nImage = nImage; 
	strcpy(pPageInfo->strText,pText); 
	 
	m_PageArray.Add(pPageInfo); 
	 
	if(::IsWindow(m_hWnd)) 
	{ 
		TCITEM tcItem; 
		tcItem.mask = TCIF_TEXT|TCIF_IMAGE; 
		tcItem.pszText = (char*)pText; 
		tcItem.iImage = nImage; 
		pPageInfo->nItemIndex = InsertItem(nItem, &tcItem); 
		if(pPageInfo->nItemIndex >= 0) 
		{ 
			pPageInfo->bInsertItem = 1; 
		} 
	} 
		 
	return true; 
} 
 
bool CMyViewTab::CreateAllPage() 
{ 
	TCITEM tcItem; 
	TAB_PAGE_INFO * pPageInfo = 0; 
	int nCount = m_PageArray.GetSize(); 
	for(int i=0;ibInsertItem) 
		{ 
			tcItem.mask = TCIF_TEXT|TCIF_IMAGE; 
			tcItem.pszText = (char*)pPageInfo->strText; 
			tcItem.iImage = pPageInfo->nImage; 
			pPageInfo->nItemIndex = InsertItem(pPageInfo->nItem, &tcItem); 
			if(pPageInfo->nItemIndex >= 0) 
			{ 
				pPageInfo->bInsertItem = 1; 
			} 
		} 
	} 
 
	SwitchPage(0); 
	return true; 
} 
 
bool CMyViewTab::SwitchPage(int nItem) 
{ 
	RECT rect = {0,0,0,0}; 
	TAB_PAGE_INFO * pPageInfo = 0; 
	int nCount = m_PageArray.GetSize(); 
	for(int i=0;inItemIndex) 
			{ 
				if(::IsWindow(m_hWnd)) 
					SetCurSel ( nItem ); 
 
				m_nCurrentTabPageItem = i; 
 
#ifdef MOVEWINDOW_DIRECT 
				pPageInfo->pPage->MoveWindow(&pPageInfo->rcDisplay); 
#endif 
				pPageInfo->pPage->ShowWindow(SW_SHOW); 
				//pPageInfo->pPage->Invalidate(); 
				//pPageInfo->pPage->UpdateWindow(); 
			} 
			else 
			{ 
				pPageInfo->pPage->ShowWindow(SW_HIDE); 
#ifdef MOVEWINDOW_DIRECT 
				pPageInfo->pPage->MoveWindow(&rect); 
#endif 
			} 
		} 
	} 
 
	//TRACE("switch to page %d\n",nItem); 
 
	return true; 
} 
 
CWnd * CMyViewTab::GetPage(int nItem) 
{ 
	TAB_PAGE_INFO * pPageInfo = 0; 
	int nCount = m_PageArray.GetSize(); 
	for(int i=0;inItem) 
				return pPageInfo->pPage; 
		} 
	} 
	return NULL; 
} 
 
void CMyViewTab::OnSize(UINT nType, int cx, int cy)  
{ 
	CTabCtrl::OnSize(nType, cx, cy); 
	 
	// TODO: Add your message handler code here 
} 
 
void CMyViewTab::SetParentRect(RECT * pRect) 
{ 
	ASSERT(pRect); 
 
	RECT rcPage = *pRect; 
	RECT rect; 
	RECT rcZero = {0,0,0,0}; 
	TAB_PAGE_INFO * pPageInfo = 0; 
	int nCount = m_PageArray.GetSize(); 
	for(int i=0;inItemIndex, &rect ) ) 
			{ 
				rcPage.bottom = pRect->bottom - (rect.bottom - rect.top) - TAB_HEIGHT_REVISE; 
#ifdef MOVEWINDOW_DIRECT 
				if(i == GetCurSel()) 
					pPageInfo->pPage->MoveWindow(&rcPage); 
				else 
					pPageInfo->pPage->MoveWindow(&rcZero); 
#endif 
				pPageInfo->rcDisplay = rcPage; 
			} 
		} 
	} 
} 
 
void CMyViewTab::OnPageChange(int nItem) 
{ 
	::PostMessage(m_hMsgWnd,m_nMsg,0,nItem); 
} 
 
void CMyViewTab::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	// TODO: Add your message handler code here and/or call default 
	CTabCtrl::OnLButtonDown(nFlags, point); 
 
	int nItem = GetCurSel( ); 
	if(nItem >= 0 && m_nCurrentTabPageItem != nItem) 
	{ 
		SwitchPage(nItem); 
 
		OnPageChange(nItem); 
	} 
}