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

📄 bcgpvisualmanager2003.cpp

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

	if (pTabWnd->IsFlatTab () || globalData.m_nBitsPerPixel <= 8)
	{
		CBCGPVisualManagerXP::OnEraseTabsArea (pDC, rect, pTabWnd);
		return;
	}

	CBCGPDrawManager dm (*pDC);

	COLORREF clr1 = m_clrToolBarGradientLight;
	COLORREF clr2 = CBCGPDrawManager::PixelAlpha (clr1, 120);

	if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
	{
		dm.FillGradient (rect, clr1, clr2, TRUE);
	}
	else
	{
		dm.FillGradient (rect, clr2, clr1, TRUE);
	}

	COLORREF clrActiveTab = pTabWnd->GetTabBkColor (pTabWnd->GetActiveTab ());
	if (clrActiveTab == (COLORREF)-1)
	{
		clrActiveTab = RGB (255, 255, 255);
	}

	if (pTabWnd->IsOneNoteStyle ())
	{
		if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
		{
			rect.bottom = rect.top + 2;
		}
		else
		{
			rect.top = rect.bottom - 2;
		}

		pDC->FillSolidRect (rect, clrActiveTab);
	}
}
//*************************************************************************************
void CBCGPVisualManager2003::OnDrawTab (CDC* pDC, CRect rectTab,
						int iTab, BOOL bIsActive, const CBCGPBaseTabWnd* pTabWnd)
{
	ASSERT_VALID (pTabWnd);
	ASSERT_VALID (pDC);

	if (!pTabWnd->IsOneNoteStyle () || globalData.m_nBitsPerPixel <= 8)
	{
		CBCGPVisualManagerXP::OnDrawTab (pDC, rectTab, iTab, bIsActive, pTabWnd);
		return;
	}

	CRect rectClip;
	pTabWnd->GetTabsRect (rectClip);

	const int nExtra = (iTab == 0 || bIsActive) ? 0 : rectTab.Height ();

	if (rectTab.left + nExtra + 10 > rectClip.right ||
		rectTab.right - 10 <= rectClip.left)
	{
		return;
	}

	const BOOL bIsHighlight = iTab == pTabWnd->GetHighlightedTab ();

	COLORREF clrTab = pTabWnd->GetTabBkColor (iTab);
	if (clrTab == (COLORREF)-1 && bIsActive)
	{
		clrTab = RGB (255, 255, 255);
	}

	if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
	{
		rectTab.OffsetRect (0, -1);
	}

	CRect rectFill = rectTab;

	#define POINTS_NUM	8
	POINT pts [POINTS_NUM];

	const int nHeight = rectFill.Height ();

	pts [0].x = rectFill.left;
	pts [0].y = rectFill.bottom;

	pts [1].x = rectFill.left + 2;
	pts [1].y = rectFill.bottom - 1;

	pts [2].x = rectFill.left + 4;
	pts [2].y = rectFill.bottom - 2;
	
	pts [3].x = rectFill.left + nHeight;
	pts [3].y = rectFill.top + 2;
	
	pts [4].x = rectFill.left + nHeight + 4;
	pts [4].y = rectFill.top;
	
	pts [5].x = rectFill.right - 2;
	pts [5].y = rectFill.top;
	
	pts [6].x = rectFill.right;
	pts [6].y = rectFill.top + 2;

	pts [7].x = rectFill.right;
	pts [7].y = rectFill.bottom;

	BOOL bIsCutted = FALSE;

	for (int i = 0; i < POINTS_NUM; i++)
	{
		if (pts [i].x > rectClip.right)
		{
			pts [i].x = rectClip.right;
			bIsCutted = TRUE;
		}

		if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
		{
			pts [i].y = rectFill.bottom - pts [i].y + rectFill.top;
		}
	}

	CRgn rgn;
	rgn.CreatePolygonRgn (pts, POINTS_NUM, WINDING);

	pDC->SelectClipRgn (&rgn);

	CRect rectLeft;
	pTabWnd->GetClientRect (rectLeft);
	rectLeft.right = rectClip.left - 1;

	pDC->ExcludeClipRect (rectLeft);

	CBCGPDrawManager dm (*pDC);

	COLORREF clrFill = bIsHighlight ? m_clrHighlightMenuItem : clrTab;
	COLORREF clr2;

	if (clrFill != (COLORREF)-1)
	{
		clr2 = CBCGPDrawManager::PixelAlpha (clrFill, 150);
	}
	else
	{
		clrFill = m_clrToolBarGradientDark;
		clr2 = m_clrToolBarGradientLight;
	}

	if (pTabWnd->GetLocation () == CBCGPTabWnd::LOCATION_BOTTOM)
	{
		COLORREF clr = clrFill;
		clrFill = clr2;
		clr2 = clr;

		rectFill.top++;
	}

	dm.FillGradient (rectFill, clrFill, clr2);
	pDC->SelectClipRgn (NULL);

	pDC->ExcludeClipRect (rectLeft);

	if (iTab > 0 && !bIsActive && iTab != pTabWnd->GetFirstVisibleTabNum ())
	{
		CRect rectLeftTab = rectClip;
		rectLeftTab.right = rectFill.left + rectFill.Height () - 10;

		if (pTabWnd->GetLocation () == CBCGPTabWnd::LOCATION_BOTTOM)
		{
			rectLeftTab.top -= 2;
		}
		else
		{
			rectLeftTab.bottom++;
		}

		pDC->ExcludeClipRect (rectLeftTab);
	}

	CPen penGray (PS_SOLID, 1, globalData.clrBarDkShadow);
	CPen penShadow (PS_SOLID, 1, globalData.clrBarShadow);

	CPen* pOldPen = pDC->SelectObject (&penGray);
	CBrush* pOldBrush = (CBrush*) pDC->SelectStockObject (NULL_BRUSH);

	pDC->Polyline (pts, POINTS_NUM);

	if (bIsCutted)
	{
		pDC->MoveTo (rectClip.right, rectTab.top);
		pDC->LineTo (rectClip.right, rectTab.bottom);
	}

	CRect rectRight = rectClip;
	rectRight.left = rectFill.right;

	pDC->ExcludeClipRect (rectRight);

	CPen penLight (PS_SOLID, 1, bIsHighlight ?
		globalData.clrBarDkShadow : globalData.clrBarHilite);

	pDC->SelectObject (&penLight);

	if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
	{
	}
	else
	{
		pDC->MoveTo (pts [2].x, pts [2].y + 1);
		pDC->LineTo (pts [3].x + 1, pts [3].y);

		pDC->MoveTo (pts [3].x + 1, pts [3].y + 1);
		pDC->LineTo (pts [3].x + 2, pts [3].y + 1);

		pDC->MoveTo (pts [3].x + 2, pts [3].y);
		pDC->LineTo (pts [3].x + 4, pts [3].y);

		pDC->MoveTo (pts [4].x, pts [4].y + 1);
		pDC->LineTo (pts [5].x + 1, pts [5].y + 1);

		if (!bIsActive && !bIsCutted)
		{
			pDC->SelectObject (&penShadow);

			pDC->MoveTo (pts [6].x - 2, pts [6].y - 1);
			pDC->LineTo (pts [6].x - 1, pts [6].y - 1);
		}

		pDC->MoveTo (pts [6].x - 1, pts [6].y);
		pDC->LineTo (pts [7].x - 1, pts [7].y);
	}

	pDC->SelectObject (pOldPen);
	pDC->SelectObject (pOldBrush);

	if (bIsActive)
	{
		const int iBarHeight = (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM) ? 2 : 3;
		const int y = (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM) ? 
			(rectTab.top - iBarHeight) : (rectTab.bottom);

		CRect rectFill (CPoint (rectTab.left + 2, y), 
						CSize (rectTab.Width () - 1, iBarHeight));
		
		if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
		{
			rectFill.OffsetRect (-1, 1);
		}

		rectFill.right = min (rectFill.right, rectClip.right);

		CBrush br (clrTab);
		pDC->FillRect (rectFill, &br);
	}

	if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
	{
		rectTab.left += rectTab.Height () + CBCGPBaseTabWnd::TAB_IMAGE_MARGIN;
	}
	else
	{
		rectTab.left += rectTab.Height ();
		rectTab.right -= CBCGPBaseTabWnd::TAB_IMAGE_MARGIN;
	}

	COLORREF clrText = pTabWnd->GetTabTextColor (iTab);
	
	COLORREF cltTextOld = (COLORREF)-1;
	if (!bIsActive && clrText != (COLORREF)-1)
	{
		cltTextOld = pDC->SetTextColor (clrText);
	}

	rectTab.right = min (rectTab.right, rectClip.right - 2);

	OnDrawTabContent (pDC, rectTab, iTab, bIsActive, pTabWnd, (COLORREF)-1);

	if (cltTextOld != (COLORREF)-1)
	{
		pDC->SetTextColor (cltTextOld);
	}

	pDC->SelectClipRgn (NULL);
}
//***********************************************************************************
BOOL CBCGPVisualManager2003::OnEraseTabsFrame (CDC* pDC, CRect rect, const CBCGPBaseTabWnd* pTabWnd)
{	
	ASSERT_VALID (pDC);
	ASSERT_VALID (pTabWnd);

	if (pTabWnd->IsFlatTab () || globalData.m_nBitsPerPixel <= 8)
	{
		return CBCGPVisualManagerXP::OnEraseTabsFrame (pDC, rect, pTabWnd);
	}

	COLORREF clrActiveTab = pTabWnd->GetTabBkColor (pTabWnd->GetActiveTab ());
	if (clrActiveTab == (COLORREF)-1)
	{
		clrActiveTab = RGB (255, 255, 255);
	}

	CBCGPDrawManager dm (*pDC);

	COLORREF clr1 = globalData.clrBarFace;
	COLORREF clr2 = globalData.clrBarHilite;

	if (pTabWnd->IsOneNoteStyle () && clrActiveTab != (COLORREF)-1)
	{
		clr1 = clrActiveTab;
		clr2 = CBCGPDrawManager::PixelAlpha (clr1, 130);
	}

	if (pTabWnd->GetLocation () == CBCGPTabWnd::LOCATION_BOTTOM)
	{
		COLORREF clr = clr1;
		clr1 = clr2;
		clr2 = clr;
	}

	dm.FillGradient2 (rect, clr1, clr2, 45);
	return TRUE;
}
//*********************************************************************************
void CBCGPVisualManager2003::OnEraseTabsButton (CDC* pDC, CRect rect,
											  CBCGPButton* pButton,
											  CBCGPBaseTabWnd* pBaseTab)
{
	ASSERT_VALID (pDC);
	ASSERT_VALID (pButton);
	ASSERT_VALID (pBaseTab);

	CBCGPTabWnd* pWndTab = DYNAMIC_DOWNCAST (CBCGPTabWnd, pBaseTab);

	if (pWndTab == NULL || pBaseTab->IsFlatTab () || globalData.m_nBitsPerPixel <= 8)
	{
		CBCGPVisualManagerXP::OnEraseTabsButton (pDC, rect, pButton, pBaseTab);
		return;
	}

	if (pBaseTab->IsOneNoteStyle () && 
		(pButton->IsPressed () || pButton->IsHighlighted ()))
	{
		CBCGPDrawManager dm (*pDC);

		if (pButton->IsPressed ())
		{
			dm.FillGradient (rect, m_clrHighlightDnGradientDark, m_clrHighlightDnGradientLight);
		}
		else
		{
			dm.FillGradient (rect, m_clrHighlightGradientDark, m_clrHighlightGradientLight);
		}

		return;
	}

	CRgn rgn;
	rgn.CreateRectRgnIndirect (rect);

	pDC->SelectClipRgn (&rgn);

	CRect rectTabs;
	pWndTab->GetClientRect (&rectTabs);

	CRect rectTabArea;
	pWndTab->GetTabsRect (rectTabArea);

	if (pWndTab->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
	{
		rectTabs.top = rectTabArea.top - pWndTab->GetTabBorderSize ();
	}
	else
	{
		rectTabs.bottom = rectTabArea.bottom + pWndTab->GetTabBorderSize ();
	}

	pWndTab->MapWindowPoints (pButton, rectTabs);
	OnEraseTabsArea (pDC, rectTabs, pWndTab);

	pDC->SelectClipRgn (NULL);
}
//************************************************************************************
void CBCGPVisualManager2003::ModifyGlobalColors ()
{
	if (globalData.m_nBitsPerPixel <= 8 || !m_bIsStandardWinXPTheme)
	{
		//----------------------------------------------
		// Theme color may differ from the system color:
		//----------------------------------------------
		globalData.clrBarFace = GetThemeColor (m_hThemeButton, COLOR_3DFACE);
		globalData.clrBarShadow = GetThemeColor (m_hThemeButton, COLOR_3DSHADOW);
		globalData.clrBarHilite = GetThemeColor (m_hThemeButton, COLOR_3DHIGHLIGHT);
		globalData.clrBarDkShadow = GetThemeColor (m_hThemeButton, COLOR_3DDKSHADOW);
		globalData.clrBarLight = GetThemeColor (m_hThemeButton, COLOR_3DLIGHT);
	}
	else
	{
		BOOL bIsOliveGreenTheme = 
			m_strWinXPThemeColor.CompareNoCase (_T("homestead")) == 0;

		BOOL bIsSilverTheme = 
			m_strWinXPThemeColor.CompareNoCase (_T("metallic")) == 0;

		if (bIsOliveGreenTheme)
		{
			globalData.clrBarFace = CBCGPDrawManager::SmartMixColors (
				m_clrToolBarGradientDark,
				m_clrToolBarGradientLight, 1., 2, 1);
		}
		else if (bIsSilverTheme)
		{
			globalData.clrBarFace = CBCGPDrawManager::PixelAlpha (CBCGPDrawManager::SmartMixColors (
				m_clrToolBarGradientDark,
				m_clrToolBarGradientLight), 95);
		}
		else
		{
			globalData.clrBarFace = CBCGPDrawManager::SmartMixColors (
				GetThemeColor (m_hThemeWindow, /*COLOR_HIGHLIGHT*/29),
				GetThemeColor (m_hThemeWindow, COLOR_WINDOW));
		}

		globalData.clrBarShadow = CBCGPDrawManager::PixelAlpha (
			globalData.clrBarFace, 70);
		globalData.clrBarHilite = CBCGPDrawManager::PixelAlpha (
			globalData.clrBarFace, 130);
		globalData.clrBarDkShadow = CBCGPDrawManager::PixelAlpha (
			globalData.clrBarFace, 50);
		globalData.clrBarLight = CBCGPDrawManager::PixelAlpha (
			globalData.clrBarFace, 110);
	}

	globalData.brBarFace.DeleteObject ();
	globalData.brBarFace.CreateSolidBrush (globalData.clrBarFace);
}

⌨️ 快捷键说明

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