📄 bcgpvisualmanager2003.cpp
字号:
clrBase, 120);
m_clrToolBarGradientLight = CBCGPDrawManager::SmartMixColors (
clrBase,
GetThemeColor (m_hThemeWindow, COLOR_WINDOW),
1.03);
m_clrBarGradientLight = m_clrToolBarGradientLight;
}
else // Normal "blue" theme
{
m_clrToolBarGradientDark = CBCGPDrawManager::SmartMixColors (
clrBase,
GetThemeColor (m_hThemeWindow, COLOR_3DFACE),
0.93, 2);
m_clrBarGradientDark = CBCGPDrawManager::SmartMixColors (
clrBase,
GetThemeColor (m_hThemeWindow, COLOR_3DLIGHT),
.99, 2, 1);
m_clrToolBarGradientLight = CBCGPDrawManager::SmartMixColors (
clrBase,
GetThemeColor (m_hThemeWindow, COLOR_WINDOW),
1.03);
m_clrBarGradientLight = m_clrToolBarGradientLight;
}
m_clrToolBarGradientVertLight = m_clrToolBarGradientLight;
m_clrToolBarGradientVertDark = CBCGPDrawManager::PixelAlpha (
m_clrToolBarGradientDark, 98);
COLORREF clrSeparatorDark;
//-------------------------------------
// Calculate highlight gradient colors:
//-------------------------------------
if (m_bIsStandardWinXPTheme)
{
ASSERT (m_pfGetThemeColor != NULL);
COLORREF clr1, clr2, clr3;
(*m_pfGetThemeColor) (m_hThemeButton, 1, 0, 3823, &clr1);
(*m_pfGetThemeColor) (m_hThemeButton, 2, 0, 3823, &clr2);
(*m_pfGetThemeColor) (m_hThemeWindow, 18, 0, 3821, &clr3);
m_clrHighlightMenuItem = CBCGPDrawManager::SmartMixColors (
clr1,
clr2,
1.3, 1, 1);
m_clrHighlightGradientLight = CBCGPDrawManager::SmartMixColors (
clr1,
clr3,
1.55, 2, 1);
m_clrHighlightGradientDark = CBCGPDrawManager::SmartMixColors (
clr1,
clr2,
1.03, 2, 1);
m_clrHighlightDnGradientLight = CBCGPDrawManager::SmartMixColors (
clr1,
clr3,
1.03, 1, 2);
m_brFloatToolBarBorder.DeleteObject ();
COLORREF clrCustom;
(*m_pfGetThemeColor) (m_hThemeButton, 2, 0, 3822, &clrCustom);
COLORREF clrToolbarBorder = CBCGPDrawManager::SmartMixColors (
clrCustom,
clrBase,
0.84, 1, 4);
m_brFloatToolBarBorder.CreateSolidBrush (clrToolbarBorder);
m_clrCustomizeButtonGradientDark = CBCGPDrawManager::SmartMixColors (
clrCustom,
clrBase,
0.63, 1, 3);
globalData.clrBarDkShadow = m_clrCustomizeButtonGradientDark;
(*m_pfGetThemeColor) (m_hThemeButton, 1, 5, 3823, &clrCustom);
m_clrCustomizeButtonGradientLight = CBCGPDrawManager::SmartMixColors (
clrCustom,
clrBase,
1.2, 1, 3);
globalData.clrBarShadow = CBCGPDrawManager::SmartMixColors (
clrCustom,
clrBase,
1.4, 1, 3);
m_clrToolBarBottomLine = CBCGPDrawManager::PixelAlpha (m_clrToolBarGradientDark, 50);
m_colorToolBarCornerTop = CBCGPDrawManager::PixelAlpha (m_clrToolBarGradientLight, 92);
m_colorToolBarCornerBottom = CBCGPDrawManager::PixelAlpha (m_clrToolBarGradientDark, 97);
m_clrGripper =
CBCGPDrawManager::PixelAlpha (m_clrToolBarGradientVertDark, 40);
clrSeparatorDark =
CBCGPDrawManager::PixelAlpha (m_clrToolBarGradientVertDark, 81);
m_clrMenuItemBorder = m_clrGripper;
m_clrMenuBorder = clrBase;
}
else
{
m_clrHighlightMenuItem = (COLORREF)-1;
m_clrHighlightGradientLight = m_clrHighlight;
m_clrHighlightGradientDark = m_clrHighlightDn;
m_clrHighlightDnGradientLight =
CBCGPDrawManager::PixelAlpha (m_clrHighlightGradientLight, 120);
m_clrCustomizeButtonGradientDark = globalData.clrBarShadow;
m_clrCustomizeButtonGradientLight =
CBCGPDrawManager::PixelAlpha (globalData.clrBarShadow, 125);
m_clrToolBarBottomLine = m_clrToolBarGradientDark;
m_colorToolBarCornerTop = globalData.clrBarLight;
m_colorToolBarCornerBottom = m_clrToolBarGradientDark;
m_clrGripper = globalData.clrBarShadow;
clrSeparatorDark = globalData.clrBarShadow;
}
m_clrHighlightDnGradientDark = m_clrHighlightGradientDark;
m_clrHighlightCheckedGradientLight = m_clrHighlightDnGradientDark;
m_clrHighlightCheckedGradientDark =
CBCGPDrawManager::PixelAlpha (m_clrHighlightDnGradientLight, 120);
m_clrCaptionBarGradientLight = globalData.clrBarShadow;
m_clrCaptionBarGradientDark = globalData.clrBarDkShadow;
m_brTabBack.DeleteObject ();
m_brTabBack.CreateSolidBrush (m_clrToolBarGradientLight);
m_penSeparatorLight.DeleteObject ();
m_penSeparatorLight.CreatePen (PS_SOLID, 1, globalData.clrBarHilite);
m_brTearOffCaption.DeleteObject ();
m_brTearOffCaption.CreateSolidBrush (globalData.clrBarFace);
m_brFace.DeleteObject ();
m_brFace.CreateSolidBrush (m_clrToolBarGradientLight);
m_penSeparator.DeleteObject ();
m_penSeparator.CreatePen (PS_SOLID, 1, clrSeparatorDark);
m_clrMenuShadowBase = globalData.clrBarFace;
// --------------------------
// Calculate TaskPane colors:
// --------------------------
if (m_bIsStandardWinXPTheme && m_hThemeExplorerBar != NULL)
{
ASSERT (m_pfGetThemeColor != NULL);
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 0, 0, 3810, &m_clrTaskPaneGradientLight);// GRADIENTCOLOR1
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 0, 0, 3811, &m_clrTaskPaneGradientDark); // GRADIENTCOLOR2
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 5, 0, 3802, &m_clrTaskPaneGroupCaptionDark); // FILLCOLOR
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 12, 0, 3802, &m_clrTaskPaneGroupCaptionSpecDark);// FILLCOLOR
m_clrTaskPaneGroupCaptionSpecLight = m_clrTaskPaneGroupCaptionDark;
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 5, 0, 3802, &m_clrTaskPaneGroupAreaLight); // FILLCOLOR
m_clrTaskPaneGroupAreaDark = m_clrTaskPaneGroupAreaLight;
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 9, 0, 3821, &m_clrTaskPaneGroupAreaSpecLight); // FILLCOLORHINT
m_clrTaskPaneGroupAreaSpecDark = m_clrTaskPaneGroupAreaSpecLight;
(*m_pfGetThemeColor) (m_hThemeExplorerBar, 5, 0, 3801, &m_clrTaskPaneGroupBorder); // BORDERCOLOR
m_clrTaskPaneGroupCaptionLight = m_clrTaskPaneGroupBorder;
}
else
{
m_clrTaskPaneGradientDark = m_clrBarGradientDark;
m_clrTaskPaneGradientLight = m_clrToolBarGradientLight;
m_clrTaskPaneGroupCaptionDark = m_clrBarGradientDark;
m_clrTaskPaneGroupCaptionLight = m_clrToolBarGradientLight;
m_clrTaskPaneGroupCaptionSpecDark = CBCGPDrawManager::SmartMixColors (
m_clrCustomizeButtonGradientDark,
m_clrCustomizeButtonGradientLight);
m_clrTaskPaneGroupCaptionSpecLight = m_clrCustomizeButtonGradientLight;
m_clrTaskPaneGroupAreaLight = m_clrToolBarGradientLight;
m_clrTaskPaneGroupAreaDark = m_clrToolBarGradientLight;
m_clrTaskPaneGroupAreaSpecLight = m_clrToolBarGradientLight;
m_clrTaskPaneGroupAreaSpecDark = m_clrToolBarGradientLight;
m_clrTaskPaneGroupBorder = m_clrToolBarGradientLight;
}
}
//***********************************************************************************
void CBCGPVisualManager2003::OnFillHighlightedArea (CDC* pDC, CRect rect,
CBrush* pBrush, CBCGPToolbarButton* pButton)
{
if (!m_bIsStandardWinXPTheme || globalData.m_nBitsPerPixel <= 8)
{
CBCGPVisualManagerXP::OnFillHighlightedArea (pDC, rect, pBrush, pButton);
return;
}
ASSERT_VALID (pDC);
ASSERT_VALID (pBrush);
BOOL bIsHorz = TRUE;
BOOL bIsPopupMenu = FALSE;
COLORREF clr1 = (COLORREF)-1;
COLORREF clr2 = (COLORREF)-1;
if (pButton != NULL)
{
ASSERT_VALID (pButton);
bIsHorz = pButton->IsHorizontal ();
CBCGPToolbarMenuButton* pMenuButton =
DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
bIsPopupMenu = pMenuButton != NULL &&
pMenuButton->GetParentWnd () != NULL &&
pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));
if (bIsPopupMenu && pBrush == &m_brHighlight)
{
if (m_clrHighlightMenuItem != (COLORREF)-1)
{
CBrush br (m_clrHighlightMenuItem);
pDC->FillRect (&rect, &br);
return;
}
}
if (pMenuButton != NULL &&
!bIsPopupMenu &&
pMenuButton->IsDroppedDown ())
{
clr1 = m_clrToolBarGradientDark;
clr2 = m_clrToolBarGradientLight;
}
}
if (pBrush == &m_brHighlight)
{
clr1 = m_clrHighlightGradientDark;
clr2 = bIsPopupMenu ? clr1 : m_clrHighlightGradientLight;
}
else if (pBrush == &m_brHighlightDn)
{
clr1 = bIsPopupMenu ? m_clrHighlightDnGradientLight : m_clrHighlightDnGradientDark;
clr2 = m_clrHighlightDnGradientLight;
}
else if (pBrush == &m_brHighlightChecked)
{
clr1 = bIsPopupMenu ? m_clrHighlightCheckedGradientLight : m_clrHighlightCheckedGradientDark;
clr2 = m_clrHighlightCheckedGradientLight;
}
if (clr1 == (COLORREF)-1 || clr2 == (COLORREF)-1)
{
CBCGPVisualManagerXP::OnFillHighlightedArea (pDC, rect, pBrush, pButton);
return;
}
CBCGPDrawManager dm (*pDC);
dm.FillGradient (rect, clr1, clr2, bIsHorz);
}
//***********************************************************************************
void CBCGPVisualManager2003::OnDrawShowAllMenuItems (CDC* pDC, CRect rect,
CBCGPVisualManager::BCGBUTTON_STATE state)
{
ASSERT_VALID (pDC);
if (globalData.m_nBitsPerPixel > 8)
{
const int xCenter = rect.CenterPoint ().x;
const int nRadius = rect.Height () / 2;
rect.left = xCenter - nRadius;
rect.right = xCenter + nRadius;
rect.OffsetRect (0, 1);
CBCGPDrawManager dm (*pDC);
dm.DrawGradientRing (rect, m_clrToolBarGradientDark, m_clrMenuLight,
(COLORREF)-1,
45, nRadius - 1);
}
CBCGPVisualManager::OnDrawShowAllMenuItems (pDC, rect, state);
}
//************************************************************************************
int CBCGPVisualManager2003::GetShowAllMenuItemsHeight (CDC* pDC, const CSize& sizeDefault)
{
int nHeight = CBCGPVisualManager::GetShowAllMenuItemsHeight (pDC, sizeDefault);
return nHeight + 4;
}
//***********************************************************************************
void CBCGPVisualManager2003::OnDrawCaptionBarBorder (CDC* pDC,
CBCGPCaptionBar* /*pBar*/, CRect rect, COLORREF clrBarBorder, BOOL bFlatBorder)
{
ASSERT_VALID (pDC);
if (clrBarBorder == (COLORREF) -1)
{
clrBarBorder = m_clrToolBarGradientLight;
}
CBrush brBorder (clrBarBorder);
pDC->FillRect (rect, &brBorder);
if (!bFlatBorder)
{
pDC->Draw3dRect (rect, m_clrToolBarGradientLight, m_clrToolBarBottomLine);
}
}
//**************************************************************************************
void CBCGPVisualManager2003::OnDrawComboDropButton (CDC* pDC, CRect rect,
BOOL bDisabled,
BOOL bIsDropped,
BOOL bIsHighlighted,
CBCGPToolbarComboBoxButton* pButton)
{
if (globalData.m_nBitsPerPixel <= 8)
{
CBCGPVisualManagerXP::OnDrawComboDropButton (pDC, rect,
bDisabled, bIsDropped,
bIsHighlighted, pButton);
return;
}
ASSERT_VALID(pDC);
ASSERT_VALID (this);
CPoint pointTriangle (
rect.left + (rect.Width () - CMenuImages::Size ().cx) / 2 + 1,
rect.top + (rect.Height () - CMenuImages::Size ().cy) / 2 + 1);
if (bIsDropped || bIsHighlighted)
{
OnFillHighlightedArea (pDC, rect,
bIsDropped ? &m_brHighlightDn : &m_brHighlight,
NULL);
CPen pen (PS_SOLID, 1, m_clrMenuItemBorder);
CPen* pOldPen = pDC->SelectObject (&pen);
ASSERT (pOldPen != NULL);
pDC->MoveTo (rect.left, rect.top);
pDC->LineTo (rect.left, rect.bottom);
pDC->SelectObject (pOldPen);
}
else
{
CBCGPDrawManager dm (*pDC);
dm.FillGradient (rect, m_clrToolBarGradientDark, m_clrToolBarGradientLight, TRUE);
pDC->Draw3dRect (rect, globalData.clrWindow, globalData.clrWindow);
}
CMenuImages::Draw (pDC, CMenuImages::IdArowDown, pointTriangle,
bDisabled ? CMenuImages::ImageGray : (bIsDropped && bIsHighlighted) ?
CMenuImages::ImageWhite : CMenuImages::ImageBlack);
}
//***********************************************************************************
void CBCGPVisualManager2003::OnDrawTearOffCaption (CDC* pDC, CRect rect, BOOL bIsActive)
{
if (globalData.m_nBitsPerPixel <= 8)
{
CBCGPVisualManagerXP::OnDrawTearOffCaption (pDC, rect, bIsActive);
return;
}
const int iBorderSize = 1;
ASSERT_VALID (pDC);
pDC->FillRect (rect, &m_brMenuLight);
rect.DeflateRect (iBorderSize, 1);
if (bIsActive)
{
OnFillHighlightedArea (pDC, rect, bIsActive ? &m_brHighlight : &m_brBarBkgnd,
NULL);
}
else
{
pDC->FillRect (rect, &m_brTearOffCaption);
}
// Draw gripper:
OnDrawBarGripper (pDC, rect, FALSE, NULL);
if (bIsActive)
{
pDC->Draw3dRect (rect, m_clrMenuBorder, m_clrMenuBorder);
}
}
//***********************************************************************************
void CBCGPVisualManager2003::OnDrawMenuBorder (CDC* pDC,
CBCGPPopupMenu* pMenu, CRect rect)
{
BOOL bConnectMenuToParent = m_bConnectMenuToParent;
if (DYNAMIC_DOWNCAST (CCustomizeButton, pMenu->GetParentButton ()) != NULL)
{
m_bConnectMenuToParent = FALSE;
}
CBCGPVisualManagerXP::OnDrawMenuBorder (pDC, pMenu, rect);
m_bConnectMenuToParent = bConnectMenuToParent;
}
//***********************************************************************************
COLORREF CBCGPVisualManager2003::GetThemeColor (HTHEME hTheme, int nIndex) const
{
if (hTheme != NULL && m_pfGetThemeSysColor != NULL)
{
return (*m_pfGetThemeSysColor) (hTheme, nIndex);
}
return ::GetSysColor (nIndex);
}
//***********************************************************************************
void CBCGPVisualManager2003::OnEraseTabsArea (CDC* pDC, CRect rect,
const CBCGPBaseTabWnd* pTabWnd)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pTabWnd);
if (pTabWnd->IsDialogControl ())
{
pDC->FillRect (rect, &globalData.brBtnFace);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -