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

📄 bcgpbasetabbedbar.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	if (!CBCGPDockingControlBar::FloatControlBar (rectFloat, dockMethod, bShow))
	{
		return FALSE;
	}

	CBCGPMiniFrameWnd* pParentFrame = GetParentMiniFrame ();
	if (pParentFrame != NULL)
	{
		pParentFrame->SetIcon (m_pTabWnd->GetTabHicon (m_pTabWnd->GetActiveTab ()), FALSE);
	}

	return TRUE;
}
//**************************************************************************************
void CBCGPBaseTabbedBar::Serialize (CArchive& ar)
{
	CBCGPDockingControlBar::Serialize (ar);
	if (ar.IsLoading ())
	{
		ar >> m_bAutoDestroy;
	}
	else
	{
		ar << m_bAutoDestroy;
	}
}
//**************************************************************************************
void CBCGPBaseTabbedBar::SerializeTabWindow (CArchive& ar)
{
	if (m_pTabWnd != NULL)
	{
		m_pTabWnd->Serialize (ar);
	}
}
//**************************************************************************************
void CBCGPBaseTabbedBar::LoadSiblingBarIDs (CArchive& ar, CList<UINT, UINT>& lstBarIDs)
{
	ASSERT (ar.IsLoading ());
	if (ar.IsLoading ())
	{
		int nTabsNum = 0;
		ar >> nTabsNum;
		for (int i = 0; i < nTabsNum; i++)
		{
			int nBarID = -1;
			ar >> nBarID;
			ASSERT (nBarID != -1);
			lstBarIDs.AddTail (nBarID);
		}
	}
}
//**************************************************************************************
void CBCGPBaseTabbedBar::SaveSiblingBarIDs (CArchive& ar)
{
	ASSERT_VALID (this);
	ASSERT (ar.IsStoring ());
	ASSERT_VALID (m_pTabWnd);

	if (ar.IsStoring () && m_pTabWnd != NULL)
	{
		int nTabsNum = m_pTabWnd->GetTabsNum ();
		// DO NOT SAVE empty tabbed bars
		if (nTabsNum > 0)
		{
			ar << nTabsNum;
			for (int i = 0; i < nTabsNum; i++)
			{
				CBCGPBaseControlBar* pWnd = 
					DYNAMIC_DOWNCAST (CBCGPBaseControlBar, m_pTabWnd->GetTabWnd (i));
				ASSERT_VALID (pWnd);

				ar << pWnd->GetDlgCtrlID ();
			}
		}
	}
}
//**************************************************************************************
BOOL CBCGPBaseTabbedBar::LoadState (LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pTabWnd);

	// if initially tabbed bars were detached by user and exist only as regular
	// docking control bars we need to give them a chance to load their state 
	// from the registry

	CBCGPDockingControlBar::LoadState (lpszProfileName, nIndex, uiID);

	int nTabsNum = m_pTabWnd->GetTabsNum ();
	for (int i = 0; i < nTabsNum; i++)
	{
		CBCGPBaseControlBar* pWnd = 
			DYNAMIC_DOWNCAST (CBCGPBaseControlBar, m_pTabWnd->GetTabWnd (i));

		if (pWnd != NULL)
		{
			ASSERT_VALID (pWnd);
			pWnd->LoadState (lpszProfileName, nIndex, uiID);
		}
	}

	return TRUE;
}

//**************************************************************************************
BOOL CBCGPBaseTabbedBar::SaveState (LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pTabWnd);

	CBCGPDockingControlBar::SaveState (lpszProfileName, nIndex, uiID);

	int nTabsNum = m_pTabWnd->GetTabsNum ();
	for (int i = 0; i < nTabsNum; i++)
	{
		CBCGPBaseControlBar* pWnd = 
			DYNAMIC_DOWNCAST (CBCGPBaseControlBar, m_pTabWnd->GetTabWnd (i));

		if (pWnd != NULL)
		{
			ASSERT_VALID (pWnd);
			if (!pWnd->SaveState (lpszProfileName, nIndex, uiID))
			{
				return FALSE;
			}
		}
	}

	return TRUE;
}

//**************************************************************************************
void CBCGPBaseTabbedBar::ApplyRestoredTabInfo ()
{
	ASSERT_VALID (this);

	if (m_pTabWnd != NULL)
	{
		m_pTabWnd->ApplyRestoredTabInfo ();
	}
}
//**************************************************************************************
void CBCGPBaseTabbedBar::RecalcLayout ()
{
	ASSERT_VALID (this);

	CBCGPDockingControlBar::RecalcLayout ();

	if (m_pTabWnd != NULL)
	{
		m_pTabWnd->RecalcLayout ();
	}
}
//**************************************************************************************
BOOL CBCGPBaseTabbedBar::CanFloat () const
{
	ASSERT_VALID (this);

	return CBCGPDockingControlBar::CanFloat ();
}
//**************************************************************************************
void CBCGPBaseTabbedBar::OnSetFocus(CWnd* pOldWnd) 
{
	CBCGPDockingControlBar::OnSetFocus(pOldWnd);

	// Pass the focus to the tab window
	CWnd*	pWndChild	= GetUnderlinedWindow();
	if (pWndChild != NULL)
		pWndChild->SetFocus();
}
//**************************************************************************************
CBCGPAutoHideToolBar* CBCGPBaseTabbedBar::SetAutoHideMode (BOOL bMode, DWORD dwAlignment, 
												CBCGPAutoHideToolBar* pCurrAutoHideBar, 
												BOOL bUseTimer)
{
	CBCGPAutoHideToolBar* pAutoHideBar = pCurrAutoHideBar;
	CBCGPDockingControlBar* pActiveBar = NULL;

	int nActiveTab = m_pTabWnd->GetActiveTab ();
	int nTabsNum = m_pTabWnd->GetTabsNum ();
	
	CObList lstTmp;

	ShowControlBar (FALSE, TRUE, FALSE);

	int nNonDetachedCount = 0;
	for (int nNextTab = nTabsNum - 1; nNextTab >= 0; nNextTab--)
	{
		CBCGPDockingControlBar* pBar = DYNAMIC_DOWNCAST (CBCGPDockingControlBar, 
													m_pTabWnd->GetTabWnd (nNextTab));
		ASSERT_VALID (pBar);

		BOOL bIsVisible = m_pTabWnd->IsTabVisible (nNextTab);
		BOOL bDetachable = m_pTabWnd->IsTabDetachable (nNextTab);
	
		if (pBar != NULL && bIsVisible && bDetachable)
		{
			m_pTabWnd->RemoveTab (nNextTab, FALSE);
			pBar->EnableGripper (TRUE);

			pBar->StoreRecentTabRelatedInfo ();

			CWnd* pOldParent = pBar->GetParent ();
			pBar->OnBeforeChangeParent (m_pDockSite);
			pBar->SetParent (m_pDockSite);
			pBar->SetOwner (m_pDockSite);
			pBar->OnAfterChangeParent (pOldParent);

			lstTmp.AddHead (pBar);
			
			if (nNextTab == nActiveTab)
			{
				pActiveBar = pBar;
			}
		}
		else
		{
			nNonDetachedCount++;
		}
	}

	BOOL bActiveSet = FALSE;
	CBCGPControlBar* pNewAHBar = NULL;

	for (POSITION pos = lstTmp.GetHeadPosition (); pos != NULL;)
	{
		CBCGPDockingControlBar* pBar = DYNAMIC_DOWNCAST (CBCGPDockingControlBar, 
													lstTmp.GetNext (pos));
		BOOL bUseTimerForActiveBar = (pBar == pActiveBar) && bUseTimer;
		pNewAHBar = pBar->SetAutoHideMode (TRUE, dwAlignment, NULL, bUseTimerForActiveBar);

		if (pNewAHBar != NULL)
		{
			pNewAHBar->m_bFirstInGroup = (lstTmp.GetHead () == pBar);
			pNewAHBar->m_bLastInGroup = (lstTmp.GetTail () == pBar);
			pNewAHBar->m_bActiveInGroup = (pBar == pActiveBar);

			if (!bActiveSet && pNewAHBar->m_bActiveInGroup)
			{
				bActiveSet = TRUE;
			}
		}
	}

	if (pNewAHBar != NULL)
	{
		if (!bActiveSet)
		{
			pNewAHBar->m_bActiveInGroup = TRUE;
		}
		CRect rect (0, 0, 0, 0);
		pNewAHBar->GetParentDockBar ()->RepositionBars (rect);
	}

	if (nNonDetachedCount > 0)
	{
		if (m_pTabWnd->GetVisibleTabsNum () == 0)
		{
			ShowControlBar (FALSE, TRUE, FALSE);
		}
		else
		{
			if (m_pTabWnd->GetActiveTab () == -1)
			{	
				int nVisibleTab = -1;
				GetFirstVisibleTab (nVisibleTab);
				m_pTabWnd->SetActiveTab (nVisibleTab);
			}
			m_pTabWnd->RecalcLayout ();
			ShowControlBar (TRUE, TRUE, FALSE);
			pAutoHideBar = CBCGPDockingControlBar::SetAutoHideMode (bMode, dwAlignment, pCurrAutoHideBar, bUseTimer);
		}
	}
	
	if (pAutoHideBar != NULL)
	{
		pAutoHideBar->UpdateVisibleState();
	}

	return pAutoHideBar;
}
//**************************************************************************************
CWnd* CBCGPBaseTabbedBar::GetFirstVisibleTab (int& iTabNum)
{
	iTabNum = -1;
	if (m_pTabWnd == NULL)
	{
		return NULL;
	}

	return m_pTabWnd->GetFirstVisibleTab (iTabNum);
}
//**************************************************************************************
HICON CBCGPBaseTabbedBar::GetBarIcon (BOOL bBigIcon)
{
	HICON hIcon = GetIcon (bBigIcon);

	if (hIcon == NULL && m_pTabWnd != NULL)
	{
		CWnd* pWnd = m_pTabWnd->GetActiveWnd ();
		if (pWnd != NULL)
		{
			hIcon = pWnd->GetIcon (bBigIcon);
		}
	}

	return hIcon;
}
//**************************************************************************************
LRESULT CBCGPBaseTabbedBar::OnChangeActiveTab (WPARAM wp, LPARAM)
{
	int iTabNum = (int) wp;

	CString strLabel;
	if (m_pTabWnd != NULL && m_pTabWnd->GetTabLabel (iTabNum, strLabel) &&
		m_bSetCaptionTextToTabName)
	{
		SetWindowText (strLabel);
	}

	OnActivateTab (iTabNum);
	return 0;
}
//**************************************************************************************
BOOL CBCGPBaseTabbedBar::Dock (CBCGPBaseControlBar* pTargetBar, LPCRECT lpRect, 
							   BCGP_DOCK_METHOD dockMethod)
{
	if (dockMethod != DM_DBL_CLICK)
	{
		return CBCGPDockingControlBar::Dock (pTargetBar, lpRect, dockMethod);
	}
	
	BOOL bFloating = (GetParentMiniFrame () != NULL);
	if (bFloating && m_recentDockInfo.GetRecentContainer (TRUE) != NULL ||
		!bFloating && m_recentDockInfo.GetRecentContainer (FALSE) != NULL)
	{
		return CBCGPDockingControlBar::Dock (pTargetBar, lpRect, dockMethod);
	}
	
	int nTabsNum = m_pTabWnd->GetTabsNum ();

	ShowControlBar (FALSE, TRUE, FALSE);

	int nNonDetachedCount = 0;
	for (int nNextTab = nTabsNum - 1; nNextTab >= 0; nNextTab--)
	{
		CBCGPDockingControlBar* pBar = DYNAMIC_DOWNCAST (CBCGPDockingControlBar, 
													m_pTabWnd->GetTabWnd (nNextTab));
		ASSERT_VALID (pBar);

		BOOL bIsVisible = m_pTabWnd->IsTabVisible (nNextTab);
		BOOL bDetachable = m_pTabWnd->IsTabDetachable (nNextTab);
	
		if (pBar != NULL && bIsVisible && bDetachable)
		{
			m_pTabWnd->RemoveTab (nNextTab, FALSE);
			pBar->EnableGripper (TRUE);

			pBar->StoreRecentTabRelatedInfo ();

			pBar->DockControlBar (pBar, lpRect, dockMethod);			
		}
		else
		{
			nNonDetachedCount++;
		}
	}

	if (nNonDetachedCount > 0)
	{
		if (m_pTabWnd->GetVisibleTabsNum () == 0)
		{
			ShowControlBar (FALSE, TRUE, FALSE);
		}
		else
		{
			if (m_pTabWnd->GetActiveTab () == -1)
			{	
				int nVisibleTab = -1;
				GetFirstVisibleTab (nVisibleTab);
				m_pTabWnd->SetActiveTab (nVisibleTab);
			}
			m_pTabWnd->RecalcLayout ();
			ShowControlBar (TRUE, TRUE, FALSE);
			return CBCGPDockingControlBar::Dock (pTargetBar, lpRect, dockMethod);
			
		}
	}
	else
	{
		DestroyWindow ();
		return FALSE;
	}

	return TRUE;
}

⌨️ 快捷键说明

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