www.pudn.com > STabCtrl.rar > STabCtrl.h


#ifndef INC_STABCTRL 
#define INC_STABCTRL 
 
#include  
 
// STabCtrl.h : header file 
// 
 
///////////////////////////////////////////////////////////////////////////// 
// CSTabCtrl window 
// 
// Implements a tab control that automatically handles the showing and hiding 
// of objects attached to a tab's various pages eliminating the need to do so 
// via the ON_NOTIFY(TCN_SELCHANGE... ) message. 
// 
// 1.	Simply replace any instance of a CTabCtrl with CSTabCtrl, 
//		initialize it as you would an MFC CTabCtrl. 
// 2.	Use the AttachControlToTab member to attach you objects  
//		to the various avaliable pages. 
//  
// 3.	(optional) Use the SetCurSel member to programaticly show 
//		a tabs particular page. 
// 
// Once done the tab control will show and hide the attached objects depending 
// on the users tab selection. 
 
// example of CSTabCtrl's use. 
// 
// 
 
/* 
	// file : SomeDialogClass.h 
 
	class CSomeDialogClass : public CDialog 
	{ 
		CSTabCtrl m_TabCtrl; 
		CTreeCtrl m_TreeCtrl; 
		CListCtrl m_ListCtrl; 
		CComboBox m_ComboCtrl; 
 
		virtual BOOL OnInitDialog(); 
	}; 
 
 
	// file : SomeDialogClass.cpp	 
 
	BOOL CSomeDialogClass::OnInitDialog() 
	{ 
		CDialog::OnInitDialog(); 
 
		//////////////////////////////////////////////////////// 
		// set up tabs. 
		 
		PSTR pszTabItems[] = 
		{ 
			"Tab Sheet 1 : Tree control", 
			"Tab Sheet 2 : List control", 
			"Tab Sheet 3 : Combobox control", 
			NULL 
		}; 
 
		TC_ITEM tcItem; 
 
		for(INT i = 0; 
			pszTabItems[i] != NULL; 
			i++) 
		{ 
			tcItem.mask = TCIF_TEXT; 
			tcItem.pszText = pszTabItems[i]; 
			tcItem.cchTextMax = strlen(pszTabItems[i]); 
			m_TabCtrl.InsertItem(i,&tcItem); 
		} 
 
		// attach controls to tabs pages. 
 
		m_TabCtrl.AttachControlToTab(&m_TreeCtrl,0);	// attach tree control to first page 
		m_TabCtrl.AttachControlToTab(&m_ListCtrl,1);	// attach list control to second page 
		m_TabCtrl.AttachControlToTab(&m_ComboCtrl,2);	// attach combo box control to third page 
 
		// initialize tab to first page. 
		m_TabCtrl.SetCurSel(0); 
		//////////////////////////////////////////////////////// 
	} 
 
 
 */ 
 
class CSTabCtrl : public CTabCtrl 
{ 
// Construction 
public: 
	CSTabCtrl(); 
 
// Attributes 
public: 
 
// Operations 
public: 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CSTabCtrl) 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	virtual ~CSTabCtrl(); 
	virtual BOOL AttachControlToTab(CWnd * _pControl,INT _nTabNum); 
	virtual SetCurSel( int nItem ); 
 
	// Generated message map functions 
protected: 
	//{{AFX_MSG(CSTabCtrl) 
	afx_msg BOOL OnSelchange(NMHDR* pNMHDR, LRESULT* pResult); 
	afx_msg void OnDestroy(); 
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnEnable( BOOL bEnable ); 
	//}}AFX_MSG 
 
	DECLARE_MESSAGE_MAP() 
 
private: 
	class CSTabPage 
	{ 
	private: 
		CList  m_ControlList; 
 
	public: 
		CSTabPage(); 
		~CSTabPage(); 
 
		BOOL AttachControl (CWnd * _pControl); 
		BOOL ShowWindows ( INT _nCmdShow ); 
		BOOL EnableWindows ( BOOL _bEnable ); 
	}; 
 
	class CPageToControlsMap : public CMap  
	{ 
	public: 
		CPageToControlsMap( ); 
		~CPageToControlsMap( ); 
 
 
		BOOL AttachControl(INT _nTabNum,CWnd * _pControl); 
		BOOL ShowWindows ( INT _nCurrPage, INT _nCmdShow ); 
		BOOL EnableWindows ( INT _nCurrPage, BOOL _bEnable ); 
		void RemoveAll( ); 
	}; 
 
	INT m_nPrevSel; 
	CPageToControlsMap m_TabPagesMap; 
}; 
 
#endif // INC_STABCTRL 
/////////////////////////////////////////////////////////////////////////////