ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 從CTabCtrl繼承

從CTabCtrl繼承

原创 Linux操作系统 作者:xuhuai1 时间:2009-03-31 18:11:18 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: socket 开发
下一篇: 封装ado
请登录后发表评论 登录
全部评论

注册时间:2008-09-03

  • 博文量
    13
  • 访问量
    26456