• 首页
  • 发布文章
  • 我的文章
  • 我的收藏
  • 设置
  • 退出

TabSheet源码

blmius 2022-01-09 14:49:28
收藏
编辑
上架
下架

TabSheet.h

#if !defined(AFX\_TABSHEET\_H\_\_42EE262D\_D15F\_46D5\_8F26\_28FD049E99F4\_\_INCLUDED\_)
#define AFX\_TABSHEET\_H\_\_42EE262D\_D15F\_46D5\_8F26\_28FD049E99F4\_\_INCLUDED\_

#if \_MSC\_VER > 1000
#pragma once
#endif // \_MSC\_VER > 1000
// TabSheet.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CTabSheet window
#define MAXPAGE 16

class CTabSheet : public CTabCtrl
{
    // Construction
public:
    CTabSheet();

    // Attributes
public:

    // Operations
public:

    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX\_VIRTUAL(CTabSheet)
    //}}AFX\_VIRTUAL

    // Implementation
public:
    int GetCurSel();
    int SetCurSel(int nItem);
    void Show();
    void SetRect();
    BOOL AddPage(LPCTSTR title, CDialog \*pDialog, UINT ID);
    virtual ~CTabSheet();

    // Generated message map functions
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()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX\_INSERT\_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX\_TABSHEET\_H\_\_42EE262D\_D15F\_46D5\_8F26\_28FD049E99F4\_\_INCLUDED\_)

TabSheet.cpp

// TabSheet.cpp : implementation file
//
#include "stdafx.h"
//#include "MyPos.h"
#include "TabSheet.h"

#ifdef \_DEBUG
#define new DEBUG\_NEW
#undef THIS\_FILE
static char THIS\_FILE\[\] = \_\_FILE\_\_;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTabSheet
CTabSheet::CTabSheet()
{
    m\_nNumOfPages \= 0;
    m\_nCurrentPage \= 0;
}

CTabSheet::~CTabSheet()
{
}


BEGIN\_MESSAGE\_MAP(CTabSheet, CTabCtrl)
    //{{AFX\_MSG\_MAP(CTabSheet)
    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 (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();
}

本文转自 https://www.cnblogs.com/xixixing/p/11907380.html,如有侵权,请联系删除。