📄 tabsheet.cpp
字号:
// TabSheet.cpp : implementation file
//
#include "stdafx.h"
#include "TabSheet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTabSheet
CTabSheet::CTabSheet()
{
m_iCurPage = -1;
}
CTabSheet::~CTabSheet()
{
}
BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)
//{{AFX_MSG_MAP(CTabSheet)
ON_WM_SIZE()
ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelChange)
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTabSheet message handlers
BOOL CTabSheet::Create(CWnd *pParent, const RECT& rc, DWORD dwStyle, UINT nID)
{
ASSERT(pParent);
if ( !CTabCtrl::Create(dwStyle | TCS_HOTTRACK, rc, pParent, nID) )
return FALSE ;
return TRUE;
}
BOOL CTabSheet::AddPage(CWnd *pWnd, LPCTSTR lpszTitle, HICON hIcon)
{
ASSERT(pWnd != NULL);
ASSERT(IsWindow(pWnd->m_hWnd));
ASSERT(pWnd->GetParent()->GetSafeHwnd() == GetSafeHwnd());
PAGE_INFO pi;
if ( lpszTitle != NULL )
pi.csTitle = lpszTitle;
else
GetWindowText(pi.csTitle);
pi.hIcon = hIcon;
pi.hWnd = pWnd->GetSafeHwnd();
m_arrPage.Add(pi);
pWnd->ModifyStyleEx(0, WS_EX_CLIENTEDGE);
InsertItem(m_arrPage.GetUpperBound(), pi.csTitle);
if ( m_arrPage.GetSize() == 1 )
{
m_iCurPage = 0;
pWnd->ShowWindow(SW_SHOW);
pWnd->SetFocus();
SetCurSel(0);
AdjustContentSize();
}
else
pWnd->ShowWindow(SW_HIDE);
return TRUE;
}
void CTabSheet::OnSize(UINT nType, int cx, int cy)
{
CTabCtrl::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
GetClientRect(m_rcClient);
// m_rcClient = CRect(0,0,cx,cy);
AdjustRect(FALSE, m_rcClient);
// m_rcClient.top = 0 ;
// m_rcClient.left = 0 ;
// m_rcClient.right = cx ;
AdjustContentSize();
}
void CTabSheet::AdjustContentSize()
{
int iSel = GetCurSel();
if ( iSel < 0 || iSel >= m_arrPage.GetSize() )
return ;
HWND hWnd = m_arrPage[iSel].hWnd ;
if ( !IsWindow(hWnd))
return ;
::MoveWindow(hWnd, m_rcClient.left, m_rcClient.top, m_rcClient.Width(), m_rcClient.Height(), TRUE);
}
void CTabSheet::OnSelChange(NMHDR* lpNMHDR, LRESULT* pResult)
{
pResult = 0;
HWND hWnd = m_arrPage[m_iCurPage].hWnd ;
::ShowWindow(hWnd, SW_HIDE);
m_iCurPage = GetCurSel();
ASSERT( m_iCurPage >= 0 );
hWnd = m_arrPage[m_iCurPage].hWnd ;
::ShowWindow(hWnd, SW_SHOW);
::SetFocus(hWnd);
::MoveWindow(hWnd, m_rcClient.left, m_rcClient.top, m_rcClient.Width(), m_rcClient.Height(), TRUE);
}
void CTabSheet::OnSetFocus(CWnd* pOldWnd)
{
if ( m_iCurPage >= 0 && m_iCurPage < m_arrPage.GetSize() )
{
::SetFocus(m_arrPage[m_iCurPage].hWnd);
}
else
CTabCtrl::OnSetFocus(pOldWnd);
}
BOOL CTabSheet::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo )
{
for ( int i = 0; i < m_arrPage.GetSize(); i ++ )
{
if ( IsWindow(m_arrPage[i].hWnd) )
{
CWnd* pWnd = CWnd::FromHandle(m_arrPage[i].hWnd);
if ( pWnd->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo) )
return TRUE;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -