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,如有侵权,请联系删除。
