⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcgptabbedtoolbar.cpp

📁 远程网络监视程序的源码
💻 CPP
字号:
// BCGPTabbedToolbar.cpp : implementation file
//

#include "stdafx.h"
#include "bcgcbpro.h"
#include "BCGPTabbedToolbar.h"
#include "BCGPTabWnd.h"
#include "BCGPToolBar.h"
#include "BCGPMiniFrameWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_SERIAL(CBCGPTabbedToolbar, CBCGPToolBar, VERSIONABLE_SCHEMA | 2)
/////////////////////////////////////////////////////////////////////////////
// CBCGPTabbedToolbar

CBCGPTabbedToolbar::CBCGPTabbedToolbar()
{
	m_pTabWnd = NULL;
	m_cyTopBorder = m_cyBottomBorder = m_cxLeftBorder = m_cxRightBorder = 0;
}

CBCGPTabbedToolbar::~CBCGPTabbedToolbar()
{
}
//************************************************************************************
BOOL CBCGPTabbedToolbar::Create  (CWnd* pParentWnd, DWORD dwStyle, UINT nID, DWORD dwBCGStyle)
{
	if (dwBCGStyle & CBRS_BCGP_FLOAT)
	{
		dwStyle |= CBRS_GRIPPER;
	}

	dwStyle &= ~(CBRS_LEFT | CBRS_RIGHT);

	if (pParentWnd != NULL)
	{
		ASSERT_VALID (pParentWnd);   // must have a parent
	}

	SetBarAlignment (m_dwStyle);

	//----------------------------
	// Initialize common controls:
	//----------------------------
	VERIFY (AfxDeferRegisterClass (AFX_WNDCOMMCTLS_REG));

	//-----------------
	// Create the HWND:
	//-----------------
	CRect rect;
	rect.SetRectEmpty();

	//-----------------------------
	// Register a new window class:
	//-----------------------------
	HINSTANCE hInst = AfxGetInstanceHandle();
	UINT uiClassStyle = CS_DBLCLKS;
	HCURSOR hCursor = ::LoadCursor (NULL, IDC_ARROW);
	HBRUSH hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);

	CString strClassName;
	strClassName.Format (_T("BCGToolBar:%x:%x:%x:%x"), 
		(UINT)hInst, uiClassStyle, (UINT)hCursor, (UINT)hbrBackground);

	//---------------------------------
	// See if the class already exists:
	//---------------------------------
	WNDCLASS wndcls;
	if (::GetClassInfo (hInst, strClassName, &wndcls))
	{
		//-----------------------------------------------
		// Already registered, assert everything is good:
		//-----------------------------------------------
		ASSERT (wndcls.style == uiClassStyle);
	}
	else
	{
		//-------------------------------------------
		// Otherwise we need to register a new class:
		//-------------------------------------------
		wndcls.style = uiClassStyle;
		wndcls.lpfnWndProc = ::DefWindowProc;
		wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
		wndcls.hInstance = hInst;
		wndcls.hIcon = NULL;
		wndcls.hCursor = hCursor;
		wndcls.hbrBackground = hbrBackground;
		wndcls.lpszMenuName = NULL;
		wndcls.lpszClassName = strClassName;
		
		if (!AfxRegisterClass (&wndcls))
		{
			AfxThrowResourceException();
		}
	}

	return CBCGPBaseToolBar::Create (strClassName, dwStyle, rect, pParentWnd, nID, dwBCGStyle);
}
//************************************************************************************
BEGIN_MESSAGE_MAP(CBCGPTabbedToolbar, CBCGPToolBar)
	//{{AFX_MSG_MAP(CBCGPTabbedToolbar)
	ON_WM_CREATE()
	ON_WM_NCDESTROY()
	//}}AFX_MSG_MAP
	ON_REGISTERED_MESSAGE(BCGM_CHANGE_ACTIVE_TAB, OnChangeActiveTab)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CBCGPTabbedToolbar message handlers

int CBCGPTabbedToolbar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CBCGPBaseToolBar::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rectClient (0, 0, lpCreateStruct->cx, lpCreateStruct->cy);

	ASSERT (m_pTabWnd == NULL);

	m_pTabWnd = new CBCGPTabWnd;

	CBCGPTabWnd* pTabWnd = (CBCGPTabWnd*) m_pTabWnd;

	// Create tabs window:
	if (!pTabWnd->Create (CBCGPTabWnd::STYLE_3D, rectClient, this, 101, 
							CBCGPTabWnd::LOCATION_TOP))
	{
		TRACE0("Failed to create tab window\n");
		delete m_pTabWnd;
		m_pTabWnd = NULL;
		return -1;      // fail to create
	}

	pTabWnd->AutoDestroyWindow (FALSE);
	pTabWnd->HideSingleTab (FALSE);

	pTabWnd->m_bEnableWrapping = FALSE;
	pTabWnd->EnableTabSwap (FALSE);

	return 0;
}
//************************************************************************************
void CBCGPTabbedToolbar::OnNcDestroy() 
{
	CBCGPBaseToolBar::OnNcDestroy();
	
	if (m_pTabWnd != NULL)
	{
		delete m_pTabWnd;
		m_pTabWnd = NULL;
	}
}
//************************************************************************************
LRESULT CBCGPTabbedToolbar::OnChangeActiveTab (WPARAM wp, LPARAM)
{
	return 0;
}
//************************************************************************************
void CBCGPTabbedToolbar::RecalcLayout ()
{
	if (m_pTabWnd != NULL)
	{
		CRect rect;
		CSize size = m_pTabWnd->GetMaxWindowSize ();


		rect.top = rect.left = 0;
		rect.bottom = size.cy + m_pTabWnd->GetTabsHeight () + 
						m_pTabWnd->GetTabBorderSize () * 2 + 2;
		rect.right = size.cx + m_pTabWnd->GetTabBorderSize () * 2;

		CRect rectTabWndOld;
		m_pTabWnd->GetWindowRect (rectTabWndOld);

		m_pTabWnd->SetWindowPos (NULL, rect.left, rect.top, rect.Width (), rect.Height (), SWP_NOZORDER  | SWP_NOACTIVATE);
		m_pTabWnd->RecalcLayout ();

		HDWP hdwp = NULL;
		int nStretchSize = rect.Width () - rectTabWndOld.Width ();
		StretchBar (nStretchSize, hdwp);
		UpdateVirtualRect ();
		if (GetParentMiniFrame () != NULL)
		{
			GetParentMiniFrame ()->SizeToContent ();
		}
		else if (BCGPGetParentFrame (this) != NULL)
		{
			BCGPGetParentFrame (this)->RecalcLayout ();
		}
	}	

	CBCGPBaseToolBar::RecalcLayout ();
}
//************************************************************************************
CSize CBCGPTabbedToolbar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
	CSize sizeResult (0, 0);
	CRect rectTabWnd;

	m_pTabWnd->GetWindowRect (rectTabWnd);

	sizeResult = rectTabWnd.Size ();

	CRect rect; 
	rect.SetRectEmpty();

	CalcInsideRect(rect, LM_HORZ);

	sizeResult.cy -= rect.Height();
	sizeResult.cx -= rect.Width();

	return sizeResult;
}
//************************************************************************************
BOOL CBCGPTabbedToolbar::AddTab (CBCGPControlBar* pNewBar, BOOL bVisible, 
								 BOOL bSetActive, BOOL bDetachable)
{
	if (m_pTabWnd == NULL)
	{
		return FALSE;
	}

	pNewBar->SetParent (m_pTabWnd);
	pNewBar->SetOwner (BCGPGetParentFrame (this));

	CString strText; 
	pNewBar->GetWindowText (strText);

	DWORD dwStyle = pNewBar->GetBarStyle ();
	pNewBar->SetBarStyle (dwStyle & ~CBRS_GRIPPER);

	m_pTabWnd->AddTab (pNewBar, strText, (UINT) -1, bDetachable);

	int nTabCount = m_pTabWnd->GetTabsNum ();

	if (bSetActive)
	{
		m_pTabWnd->SetActiveTab (nTabCount - 1);
	}

	
	m_pTabWnd->ShowTab (nTabCount - 1, bVisible);
	RecalcLayout ();

	return TRUE;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -