📄 bcgpvisualmanager2003.cpp
字号:
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 + -