コード例 #1
0
//*************************************************************************************************
void CBCGPVisualManagerVS2008::OnHighlightMenuItem (CDC* pDC, CBCGPToolbarMenuButton* pButton,
											CRect rect, COLORREF& clrText)
{
	ASSERT_VALID (pDC);
	ASSERT_VALID (pButton);

	if (globalData.m_nBitsPerPixel <= 8 || globalData.IsHighContastMode ())
	{
		CBCGPVisualManagerVS2005::OnHighlightMenuItem (pDC, pButton, rect, clrText);
		return;
	}

	const int nRoundSize = 3;
	const BOOL bIsWinXPBlue = (GetStandardWinXPTheme () == WinXpTheme_Blue);

	COLORREF clr1 = bIsWinXPBlue ? WINXPBLUE_GRADIENT_DARK : m_clrHighlightGradientDark;
	COLORREF clr2 = bIsWinXPBlue ? WINXPBLUE_GRADIENT_LIGHT : m_clrHighlightGradientLight;
	COLORREF clrBorder = bIsWinXPBlue ? WINXPBLUE_MENUITEM_BORDER : m_clrHighlightGradientDark;

	if (m_bOSColors)
	{
		clr1 = m_clrHighlight;
		clr2 = RGB (255, 255, 255);
		clrBorder = m_clrHighlightDn;
	}

	if (DYNAMIC_DOWNCAST(CBCGPCustomizeMenuButton, pButton) == NULL)
	{
		rect.DeflateRect (2, 0);
	}

	CRgn rgn;
	rgn.CreateRoundRectRgn (rect.left, rect.top, rect.right, rect.bottom, nRoundSize, nRoundSize);

	pDC->SelectClipRgn (&rgn);

	CBCGPDrawManager dm (*pDC);
	dm.FillGradient (rect, clr1, clr2, TRUE);

	pDC->SelectClipRgn (NULL);

	CPen pen (PS_SOLID, 1, clrBorder);
	CPen* pOldPen = pDC->SelectObject (&pen);
	CBrush* pOldBrush = (CBrush*) pDC->SelectStockObject (NULL_BRUSH);

	pDC->RoundRect (rect.left, rect.top, rect.right, rect.bottom, nRoundSize + 2, nRoundSize + 2);

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

	clrText = GetHighlightedMenuItemTextColor (pButton);
}
コード例 #2
0
//*********************************************************************************************************
void CBCGPVisualManagerVS2008::OnHighlightRarelyUsedMenuItems (CDC* pDC, CRect rectRarelyUsed)
{
	ASSERT_VALID (pDC);

	if (globalData.m_nBitsPerPixel <= 8 || globalData.IsHighContastMode () ||
		GetStandardWinXPTheme () != WinXpTheme_Blue)
	{
		CBCGPVisualManagerVS2005::OnHighlightRarelyUsedMenuItems (pDC, rectRarelyUsed);
		return;
	}

	rectRarelyUsed.left --;
	rectRarelyUsed.right = rectRarelyUsed.left + CBCGPToolBar::GetMenuImageSize ().cx + 
		2 * GetMenuImageMargin () + 2;

	CBrush br (WINXPBLUE_MENU_GUTTER_DARK);
	pDC->FillRect (rectRarelyUsed, &br);
}
コード例 #3
0
void CBCGPVisualManagerVS2005::OnUpdateSystemColors ()
{
	BOOL bDefaultWinXPColors = m_bDefaultWinXPColors;

	m_clrPressedButtonBorder = (COLORREF)-1;

	m_CurrAppTheme = GetStandardWinXPTheme ();

	if (m_CurrAppTheme != WinXpTheme_Silver)
	{
		m_bDefaultWinXPColors = FALSE;
	}

	CBCGPVisualManager2003::OnUpdateSystemColors ();

	if (!bDefaultWinXPColors)
	{
		return;
	}

	COLORREF clrMenuButtonDroppedDown = m_clrBarBkgnd;
	COLORREF clrMenuItemCheckedHighlight = m_clrHighlightDn;

	if (m_hThemeComboBox == NULL ||
		m_pfGetThemeColor == NULL ||
		(*m_pfGetThemeColor) (m_hThemeComboBox, 5, 0, 3801, &m_colorActiveTabBorder) != S_OK)
	{
		m_colorActiveTabBorder = (COLORREF)-1;
	}

	if (globalData.m_nBitsPerPixel > 8 && !globalData.IsHighContastMode ())
	{
		m_clrCustomizeButtonGradientLight = CBCGPDrawManager::SmartMixColors (
			m_clrCustomizeButtonGradientDark,
			globalData.clrBarFace, 1.5, 1, 1);

		if (m_CurrAppTheme == WinXpTheme_Blue ||
			m_CurrAppTheme == WinXpTheme_Olive)
		{
			m_clrToolBarGradientDark = CBCGPDrawManager::PixelAlpha (
				m_clrToolBarGradientDark, 83);

			m_clrToolBarGradientLight = CBCGPDrawManager::SmartMixColors (
				GetBaseThemeColor (), 
				GetThemeColor (m_hThemeWindow, COLOR_WINDOW),
				1., 3, 2);
		}
		else if (!m_bIsStandardWinXPTheme)
		{
			m_clrToolBarGradientLight = CBCGPDrawManager::SmartMixColors (
				m_clrToolBarGradientLight, 
				globalData.clrBarHilite,
				1.05, 1, 1);
		}

		if (m_CurrAppTheme == WinXpTheme_Blue)
		{
			m_clrCustomizeButtonGradientDark = CBCGPDrawManager::PixelAlpha (
				m_clrCustomizeButtonGradientDark, 90);

			m_clrCustomizeButtonGradientLight = CBCGPDrawManager::PixelAlpha (
				m_clrCustomizeButtonGradientLight, 115);

			m_clrToolBarBottomLine = CBCGPDrawManager::PixelAlpha (
				m_clrToolBarBottomLine, 85);
		}
		else if (m_CurrAppTheme == WinXpTheme_Olive)
		{
			m_clrToolBarBottomLine = CBCGPDrawManager::PixelAlpha (
				m_clrToolBarBottomLine, 110);

			m_clrCustomizeButtonGradientDark = m_clrToolBarBottomLine;

			m_clrCustomizeButtonGradientLight = CBCGPDrawManager::PixelAlpha (
				m_clrCustomizeButtonGradientLight, 120);

			m_clrHighlightDn = globalData.clrHilite;

			m_clrHighlight = CBCGPDrawManager::PixelAlpha (
				m_clrHighlightDn, 124);

			m_clrHighlightChecked = CBCGPDrawManager::PixelAlpha (
				GetThemeColor (m_hThemeWindow, 27 /*COLOR_GRADIENTACTIVECAPTION*/), 98);

			m_brHighlight.DeleteObject ();
			m_brHighlightDn.DeleteObject ();

			m_brHighlight.CreateSolidBrush (m_clrHighlight);
			m_brHighlightDn.CreateSolidBrush (m_clrHighlightDn);

			m_brHighlightChecked.DeleteObject ();
			m_brHighlightChecked.CreateSolidBrush (m_clrHighlightChecked);

			m_clrHighlightGradientDark = m_clrHighlightChecked;
			m_clrHighlightGradientLight = CBCGPDrawManager::PixelAlpha (
				m_clrHighlightGradientDark, 120);
		}
		else if (m_CurrAppTheme != WinXpTheme_Silver)
		{
			m_clrToolBarBottomLine = m_clrToolBarGradientDark;
		}

		clrMenuButtonDroppedDown = CBCGPDrawManager::PixelAlpha (
			m_clrBarBkgnd, 107);

		clrMenuItemCheckedHighlight = GetThemeColor (m_hThemeWindow, COLOR_HIGHLIGHT);

		if (m_CurrAppTheme == WinXpTheme_Blue ||
			m_CurrAppTheme == WinXpTheme_Olive)
		{
			m_clrBarGradientLight = CBCGPDrawManager::PixelAlpha (
					m_clrToolBarGradientLight, 95);

			m_clrBarGradientDark = CBCGPDrawManager::PixelAlpha (
				m_clrBarGradientDark, 97);
		}

		m_clrToolbarDisabled = CBCGPDrawManager::SmartMixColors (
			m_clrToolBarGradientDark, m_clrToolBarGradientLight, 
			.92, 1, 2);

		m_clrPressedButtonBorder = CBCGPDrawManager::SmartMixColors (
				m_clrMenuItemBorder, 
				globalData.clrBarDkShadow,
				.8, 1, 2);
	}

	m_brMenuButtonDroppedDown.DeleteObject ();
	m_brMenuButtonDroppedDown.CreateSolidBrush (clrMenuButtonDroppedDown);

	m_brMenuItemCheckedHighlight.DeleteObject ();
	m_brMenuItemCheckedHighlight.CreateSolidBrush (clrMenuItemCheckedHighlight);

	m_penActiveTabBorder.DeleteObject ();

	if (m_colorActiveTabBorder != (COLORREF)-1)
	{
		m_penActiveTabBorder.CreatePen (PS_SOLID, 1, m_colorActiveTabBorder);
	}

	m_bDefaultWinXPColors = bDefaultWinXPColors;

	m_clrInactiveTabText = globalData.clrBtnDkShadow;

	if (globalData.m_nBitsPerPixel > 8 && !globalData.IsHighContastMode ())
	{
		m_penSeparator.DeleteObject ();

		COLORREF clrSeparator = CBCGPDrawManager::PixelAlpha (
			globalData.clrBarFace, 84);

		m_penSeparator.CreatePen (PS_SOLID, 1, clrSeparator);
	}
}
コード例 #4
0
//*********************************************************************************************************
COLORREF CBCGPVisualManagerVS2008::OnFillCommandsListBackground (CDC* pDC, CRect rect, BOOL bIsSelected)
{
	if (globalData.m_nBitsPerPixel <= 8 || globalData.IsHighContastMode ())
	{
		return CBCGPVisualManagerVS2005::OnFillCommandsListBackground (pDC, rect, bIsSelected);
	}

	ASSERT_VALID (this);
	ASSERT_VALID (pDC);

	rect.left = 0;

	const BOOL bIsWinXPBlue = (GetStandardWinXPTheme () == WinXpTheme_Blue) || m_bOSColors;

	if (bIsSelected)
	{
		COLORREF clr1 = bIsWinXPBlue ? WINXPBLUE_GRADIENT_DARK : m_clrHighlightGradientDark;
		COLORREF clr2 = bIsWinXPBlue ? WINXPBLUE_GRADIENT_LIGHT : m_clrHighlightGradientLight;
		COLORREF clrBorder = bIsWinXPBlue ? WINXPBLUE_MENUITEM_BORDER : m_clrHighlightGradientDark;

		if (m_bOSColors)
		{
			clr1 = m_clrHighlight;
			clr2 = RGB (255, 255, 255);
			clrBorder = m_clrHighlightDn;
		}

		CBCGPDrawManager dm (*pDC);
		dm.FillGradient (rect, clr1, clr2, TRUE);

		pDC->Draw3dRect (rect, clrBorder, clrBorder);

		CBCGPToolbarMenuButton dummy;
		return GetHighlightedMenuItemTextColor (&dummy);
	}
	else
	{
		pDC->FillRect (rect, &m_brMenuLight);

		int iImageWidth = CBCGPToolBar::GetMenuImageSize ().cx + GetMenuImageMargin ();

		CRect rectImages = rect;
		rectImages.right = rectImages.left + iImageWidth + MENU_IMAGE_MARGIN;

		if (bIsWinXPBlue)
		{
			CBrush br (WINXPBLUE_MENU_GUTTER);
			pDC->FillRect (rectImages, &br);

			CPen* pOldPen = pDC->SelectObject (&m_penSeparator);
			ASSERT (pOldPen != NULL);

			pDC->MoveTo (rectImages.right, rectImages.top);
			pDC->LineTo (rectImages.right, rectImages.bottom);

			pDC->SelectObject (pOldPen);
		}
		else
		{
			CBCGPDrawManager dm (*pDC);
			dm.FillGradient (rectImages, m_clrToolBarGradientLight, m_clrToolBarGradientDark, FALSE);
		}

		return globalData.clrBarText;
	}
}
コード例 #5
0
void CBCGPVisualManagerVS2008::OnFillBarBackground (CDC* pDC, CBCGPBaseControlBar* pBar,
								CRect rectClient, CRect rectClip,
								BOOL bNCArea)
{
	ASSERT_VALID(pBar);
	ASSERT_VALID(pDC);

	if (pBar->IsOnGlass ())
	{
		pDC->FillSolidRect (rectClient, RGB (0, 0, 0));
		return;
	}

	if (DYNAMIC_DOWNCAST (CBCGPReBar, pBar) != NULL ||
		DYNAMIC_DOWNCAST (CBCGPReBar, pBar->GetParent ()))
	{
		FillRebarPane (pDC, pBar, rectClient);
		return;
	}

	if (globalData.m_nBitsPerPixel <= 8 ||
		globalData.IsHighContastMode () ||
		!pBar->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar)) ||
		pBar->IsKindOf (RUNTIME_CLASS (CBCGPColorBar)) ||
		pBar->IsKindOf (RUNTIME_CLASS (CBCGPCalculator)) ||
		pBar->IsKindOf (RUNTIME_CLASS (CBCGPCalendarBar)) ||
		GetStandardWinXPTheme () != WinXpTheme_Blue ||
		m_bOSColors)
	{
		CBCGPVisualManagerVS2005::OnFillBarBackground (pDC, pBar, rectClient, rectClip, bNCArea);
		return;
	}

	if (rectClip.IsRectEmpty ())
	{
		rectClip = rectClient;
	}

	pDC->FillRect (rectClip, &m_brMenuLight);

	CBCGPPopupMenuBar* pMenuBar = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, pBar);
	ASSERT_VALID (pMenuBar);

	if (!pMenuBar->m_bDisableSideBarInXPMode)
	{
		CRect rectImages = rectClient;

		rectImages.right = rectImages.left + pMenuBar->GetGutterWidth ();

		if (!pMenuBar->HasGutterLogo())
		{
			rectImages.DeflateRect (0, 1);
		}

		CBrush br (WINXPBLUE_MENU_GUTTER);
		pDC->FillRect (rectImages, &br);

		CPen* pOldPen = pDC->SelectObject (&m_penSeparator);
		ASSERT (pOldPen != NULL);

		pDC->MoveTo (rectImages.right, rectImages.top);
		pDC->LineTo (rectImages.right, rectImages.bottom);

		pDC->SelectObject (pOldPen);
	}
}