百度空间 | 百度首页 
 
查看文章
 
VC tabctrl
2008-10-22 15:09
建几个对话框,style为child,border为none,在类向导中添加时基类还是CDialog
类向导加入CTabSheet,基类为CTabCtrl
头文件:
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)
        // NOTE - the ClassWizard will add and remove member functions here.
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()


cpp中:
CTabSheet::CTabSheet()
{
    m_nNumOfPages = 0;
    m_nCurrentPage = 0;
}

CTabSheet::~CTabSheet()
{
}


BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
    //{{AFX_MSG_MAP(CTabSheet)
        // NOTE - the ClassWizard will add and remove mapping macros here.
    ON_WM_LBUTTONDOWN()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabSheet message handlers
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( 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();
}


在应用对话框中的OnInitDialog()中加入:
    m_tab.AddPage("全校整体情况",&m_page1,IDD_DIALOG_TAB1);
    m_tab.AddPage("tab2",&m_page2,IDD_DIALOG_TAB2);
    m_tab.Show();

类别:vc资源库 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2009-03-20 08:52 | 回复
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu