從CTabCtrl繼承

class CTabSheet : public CTabCtrl
{
// Construction
public:
 CTabSheet();
public:
 int GetCurSel();
 int SetCurSel(int nItem);
 void Show();
 void SetRect();
 BOOL AddPage(LPCTSTR title, CDialog *pDialog, UINT ID);
 virtual ~CTabSheet();
protected:
 LPCTSTR m_Title[MAXPAGE];
 UINT m_IDD[MAXPAGE];
 CDialog* m_pPages[MAXPAGE];
 int m_nNumOfPages;
 int m_nCurrentPage;
 //{{AFX_MSG(CTabSheet)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};


BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)
{
 if( MAXPAGE == m_nNumOfPages )
  return FALSE;

 m_nNumOfPages++;

 m_pPages[m_nNumOfPages-1] = pDialog;
 m_IDD[m_nNumOfPages-1] = ID;
 m_Title[m_nNumOfPages-1] = title;

 return TRUE;
}

void CTabSheet::SetRect()
{
 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-2;
 nYc=tabRect.bottom-nY-2;

 m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
 for( int nCount=1; nCount < m_nNumOfPages; nCount++ )
  m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);

}

void CTabSheet::Show()
{
 for( int i=0; i < m_nNumOfPages; i++ )
 {
  m_pPages[i]->Create( m_IDD[i], this );
  InsertItem( i, m_Title[i] );
 }

 m_pPages[0]->ShowWindow(SW_SHOW);
 for(int i=1; i < m_nNumOfPages; i++)
  m_pPages[i]->ShowWindow(SW_HIDE);

 SetRect();

}

void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)
{
 CTabCtrl::OnLButtonDown(nFlags, point);

 if(m_nCurrentPage != GetCurFocus())
 {
  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  m_nCurrentPage=GetCurFocus();
  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
//  m_pPages[m_nCurrentPage]->SetFocus();
 }
}

int CTabSheet::SetCurSel(int nItem)
{
 if( nItem < 0 || nItem >= m_nNumOfPages)
  return -1;

 int ret = m_nCurrentPage;

 if(m_nCurrentPage != nItem )
 {
  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
  m_nCurrentPage = nItem;
  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
//  m_pPages[m_nCurrentPage]->SetFocus();
  CTabCtrl::SetCurSel(nItem);
 }

 return ret;
}

int CTabSheet::GetCurSel()
{
 return CTabCtrl::GetCurSel();
}

 

///

m_sheet.AddPage("tab1", &m_page1, IDD_DIALOG1);
 m_sheet.AddPage("tab2", &m_page2, IDD_DIALOG2);
 m_sheet.Show();

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12560256/viewspace-582487/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12560256/viewspace-582487/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值