📄 bcgpvisualmanager2003.cpp
字号:
//************************************************************************************
void CBCGPVisualManager2003::SetUseGlobalTheme (BOOL bUseGlobalTheme/* = TRUE*/)
{
m_bUseGlobalTheme = bUseGlobalTheme;
CBCGPVisualManager::GetInstance ()->OnUpdateSystemColors ();
CBCGPVisualManager::GetInstance ()->RedrawAll ();
}
//************************************************************************************
void CBCGPVisualManager2003::SetStatusBarOfficeXPLook (BOOL bStatusBarOfficeXPLook/* = TRUE*/)
{
m_bStatusBarOfficeXPLook = bStatusBarOfficeXPLook;
CBCGPVisualManager::GetInstance ()->RedrawAll ();
}
//***********************************************************************************
void CBCGPVisualManager2003::GetTabFrameColors (const CBCGPBaseTabWnd* pTabWnd,
COLORREF& clrDark,
COLORREF& clrBlack,
COLORREF& clrHighlight,
COLORREF& clrFace,
COLORREF& clrDarkShadow,
COLORREF& clrLight,
CBrush*& pbrFace,
CBrush*& pbrBlack)
{
ASSERT_VALID (pTabWnd);
CBCGPVisualManagerXP::GetTabFrameColors (pTabWnd,
clrDark, clrBlack,
clrHighlight, clrFace,
clrDarkShadow, clrLight,
pbrFace, pbrBlack);
if (pTabWnd->IsOneNoteStyle ())
{
return;
}
COLORREF clrActiveTab = pTabWnd->GetTabBkColor (pTabWnd->GetActiveTab ());
if (clrActiveTab == (COLORREF)-1)
{
clrFace = RGB (255, 255, 255);
}
clrDark = globalData.clrBarDkShadow;
clrBlack = globalData.clrBarDkShadow;
clrHighlight = globalData.clrBarDkShadow;
clrDarkShadow = globalData.clrBarDkShadow;
clrLight = globalData.clrBarDkShadow;
}
//************************************************************************************
void CBCGPVisualManager2003::OnFillTasksPaneBackground(CDC* pDC, CRect rectWorkArea)
{
ASSERT_VALID (pDC);
CBCGPDrawManager dm (*pDC);
dm.FillGradient (rectWorkArea, m_clrTaskPaneGradientDark, m_clrTaskPaneGradientLight, TRUE);
}
//************************************************************************************
void CBCGPVisualManager2003::OnDrawTasksGroupCaption(
CDC* pDC, CBCGPTasksGroup* pGroup,
BOOL bIsHighlighted /*= FALSE*/, BOOL bIsSelected /*= FALSE*/,
BOOL bCanCollapse /*= FALSE*/)
{
ASSERT_VALID(pDC);
ASSERT(pGroup != NULL);
// -----------------------
// Draw caption background
// -----------------------
POINT pts [7];
const int nLeft = pGroup->m_rect.left;
const int nTop = pGroup->m_rect.top;
pts [0].x = nLeft;
pts [0].y = pGroup->m_rect.bottom;
pts [1].x = nLeft;
pts [1].y = nTop + 4;
pts [2].x = nLeft + 1;
pts [2].y = nTop + 2;
pts [3].x = nLeft + 2;
pts [3].y = nTop + 1;
pts [4].x = nLeft + 4;
pts [4].y = nTop;
pts [5].x = pGroup->m_rect.right;
pts [5].y = nTop;
pts [6].x = pGroup->m_rect.right;
pts [6].y = pGroup->m_rect.bottom;
CRgn rgn;
rgn.CreatePolygonRgn (pts, 7, WINDING);
pDC->SelectClipRgn (&rgn);
CBCGPDrawManager dm (*pDC);
if (pGroup->m_bIsSpecial)
{
dm.FillGradient (pGroup->m_rect, m_clrTaskPaneGroupCaptionSpecDark,
m_clrTaskPaneGroupCaptionSpecLight, FALSE);
}
else
{
dm.FillGradient (pGroup->m_rect, m_clrTaskPaneGroupCaptionLight,
m_clrTaskPaneGroupCaptionDark, FALSE);
}
pDC->SelectClipRgn (NULL);
// ---------------------------
// Draw an icon if it presents
// ---------------------------
BOOL bShowIcon = (pGroup->m_hIcon != NULL
&& pGroup->m_sizeIcon.cx < pGroup->m_rect.Width () - pGroup->m_rect.Height());
if (bShowIcon)
{
CPoint pointIcon(pGroup->m_rect.left+1, pGroup->m_rect.bottom - pGroup->m_sizeIcon.cy);
pDC->DrawIcon(pointIcon, pGroup->m_hIcon);
}
// -----------------------
// Draw group caption text
// -----------------------
CFont* pFontOld = pDC->SelectObject (&globalData.fontBold);
COLORREF clrTextOld = pDC->SetTextColor (pGroup->m_bIsSpecial ?
m_clrTaskPaneGroupBorder : globalData.clrHilite);
int nBkModeOld = pDC->SetBkMode(TRANSPARENT);
int nTaskPaneHOffset = pGroup->m_pPage->m_pTaskPane->GetGroupCaptionHorzOffset();
int nTaskPaneVOffset = pGroup->m_pPage->m_pTaskPane->GetGroupCaptionVertOffset();
CRect rectText = pGroup->m_rect;
rectText.left += (bShowIcon ? pGroup->m_sizeIcon.cx :
(nTaskPaneHOffset != -1 ? nTaskPaneHOffset : m_nGroupCaptionHorzOffset));
rectText.top += (nTaskPaneVOffset != -1 ? nTaskPaneVOffset : m_nGroupCaptionVertOffset);
rectText.right = max(rectText.left, rectText.right - pGroup->m_rect.Height());
pDC->DrawText (pGroup->m_strName, rectText, DT_SINGLELINE);
pDC->SetBkMode(nBkModeOld);
pDC->SelectObject (pFontOld);
pDC->SetTextColor (clrTextOld);
// -------------------------
// Draw group caption button
// -------------------------
if (bCanCollapse && !pGroup->m_strName.IsEmpty())
{
CSize sizeButton = CMenuImages::Size();
CRect rectButton = pGroup->m_rect;
rectButton.left = max(rectButton.left,
rectButton.right - (rectButton.Height()+1)/2 - (sizeButton.cx+1)/2);
rectButton.top = max(rectButton.top,
rectButton.bottom - (rectButton.Height()+1)/2 - (sizeButton.cy+1)/2);
rectButton.right = rectButton.left + sizeButton.cx;
rectButton.bottom = rectButton.top + sizeButton.cy;
if (rectButton.right <= pGroup->m_rect.right && rectButton.bottom <= pGroup->m_rect.bottom)
{
if (bIsHighlighted)
{
// Draw button frame
CBrush brush (globalData.clrBarFace);
CBrush* pBrushOld = (CBrush*) pDC->SelectObject (&brush);
COLORREF clrBckOld = pDC->GetBkColor ();
pDC->Draw3dRect(&rectButton, globalData.clrWindow, globalData.clrBarShadow);
pDC->SetBkColor (clrBckOld);
pDC->SelectObject (pBrushOld);
}
if (!pGroup->m_bIsCollapsed)
{
CMenuImages::Draw(pDC, CMenuImages::IdArowUp, rectButton.TopLeft());
}
else
{
CMenuImages::Draw(pDC, CMenuImages::IdArowDown, rectButton.TopLeft());
}
}
}
}
//************************************************************************************
void CBCGPVisualManager2003::OnFillTasksGroupInterior(
CDC* pDC, CRect rect, BOOL bSpecial /*= FALSE*/)
{
ASSERT_VALID (pDC);
CBCGPDrawManager dm (*pDC);
if (bSpecial)
{
dm.FillGradient (rect, m_clrTaskPaneGroupCaptionSpecDark,
m_clrTaskPaneGroupCaptionSpecLight, TRUE);
}
else
{
dm.FillGradient (rect, m_clrTaskPaneGroupAreaDark,
m_clrTaskPaneGroupAreaLight, TRUE);
}
}
//************************************************************************************
void CBCGPVisualManager2003::OnDrawTasksGroupAreaBorder(
CDC* pDC, CRect rect, BOOL /*bSpecial = FALSE*/,
BOOL /*bNoTitle = FALSE*/)
{
ASSERT_VALID(pDC);
// Draw underline
CPen pen (PS_SOLID, 1, m_clrTaskPaneGroupBorder);
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
rect.right -= 1;
rect.bottom -= 1;
pDC->MoveTo (rect.left, rect.top);
pDC->LineTo (rect.right, rect.top);
pDC->LineTo (rect.right, rect.bottom);
pDC->LineTo (rect.left, rect.bottom);
pDC->LineTo (rect.left, rect.top);
pDC->SelectObject (&pPenOld);
}
//************************************************************************************
void CBCGPVisualManager2003::OnDrawTask(CDC* pDC, CBCGPTask* pTask, CImageList* pIcons,
BOOL bIsHighlighted /*= FALSE*/, BOOL bIsSelected /*= FALSE*/)
{
COLORREF clrOld = globalData.clrHotText;
globalData.clrHotText = globalData.clrHilite;
CBCGPVisualManagerXP::OnDrawTask(pDC, pTask, pIcons, bIsHighlighted, bIsSelected);
globalData.clrHotText = clrOld;
}
//**********************************************************************************
void CBCGPVisualManager2003::OnDrawScrollButtons(CDC* pDC, const CRect& rect, const int nBorderSize,
int iImage, BOOL bHilited)
{
ASSERT_VALID (pDC);
CRect rectImage (CPoint (0, 0), CMenuImages::Size ());
CRect rectFill = rect;
rectFill.top -= nBorderSize;
pDC->FillRect (rectFill, &globalData.brBarFace);
if (bHilited)
{
CBrush br (globalData.m_nBitsPerPixel <= 8 ?
globalData.clrWindow : m_clrHighlightMenuItem == (COLORREF)-1 ?
m_clrHighlight : m_clrHighlightMenuItem);
pDC->FillRect (rect, &br);
pDC->Draw3dRect (rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
}
else
{
pDC->Draw3dRect (rect, globalData.clrBarShadow, globalData.clrBarShadow);
}
CPoint point (
rect.left + (rect.Width () - rectImage.Width ()) / 2,
rect.top + (rect.Height () - rectImage.Height ()) / 2);
CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, point);
}
//**********************************************************************************
COLORREF CBCGPVisualManager2003::OnFillCommandsListBackground (CDC* pDC, CRect rect, BOOL bIsSelected)
{
ASSERT_VALID (this);
ASSERT_VALID (pDC);
COLORREF clrText;
CBCGPToolBarImages* pCommonImages = CBCGPToolBar::GetImages ();
int iImageWidth = CBCGPToolBar::GetMenuImageSize ().cx;
if (pCommonImages != NULL)
{
iImageWidth = pCommonImages->GetImageSize ().cx;
}
iImageWidth += GetMenuImageMargin ();
if (bIsSelected)
{
rect.left = 0;
COLORREF color = m_clrHighlightMenuItem == (COLORREF)-1 ?
m_clrHighlight : m_clrHighlightMenuItem;
CBrush br (color);
pDC->FillRect (&rect, &br);
pDC->Draw3dRect (rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
// Now, we should define a menu text color...
if (GetRValue (color) > 128 &&
GetGValue (color) > 128 &&
GetBValue (color) > 128)
{
clrText = RGB (0, 0, 0);
}
else
{
clrText = RGB (255, 255, 255);
}
}
else
{
pDC->FillRect (rect, &m_brMenuLight);
CRect rectImages = rect;
rectImages.right = rectImages.left + iImageWidth + MENU_IMAGE_MARGIN;
CBCGPDrawManager dm (*pDC);
dm.FillGradient (rectImages, m_clrToolBarGradientLight, m_clrToolBarGradientDark, FALSE);
clrText = globalData.clrBarText;
}
return clrText;
}
//**************************************************************************************
void CBCGPVisualManager2003::OnDrawStatusBarProgress (CDC* pDC, CBCGPStatusBar* pStatusBar,
CRect rectProgress, int nProgressTotal, int nProgressCurr,
COLORREF clrBar, COLORREF clrProgressBarDest, COLORREF clrProgressText,
BOOL bProgressText)
{
if (!DrawStatusBarProgress (pDC, pStatusBar,
rectProgress, nProgressTotal, nProgressCurr,
clrBar, clrProgressBarDest, clrProgressText, bProgressText))
{
CBCGPVisualManagerXP::OnDrawStatusBarProgress (pDC, pStatusBar,
rectProgress, nProgressTotal, nProgressCurr,
clrBar, clrProgressBarDest, clrProgressText, bProgressText);
}
}
//****************************************************************************************
void CBCGPVisualManager2003::OnFillHeaderCtrlBackground (CBCGPHeaderCtrl* pCtrl,
CDC* pDC, CRect rect)
{
ASSERT_VALID (pDC);
CBCGPVisualManagerXP::OnFillHeaderCtrlBackground (pCtrl, pDC, rect);
}
//**************************************************************************************
COLORREF CBCGPVisualManager2003::OnDrawControlBarCaption (CDC* pDC, CBCGPDockingControlBar* /*pBar*/,
BOOL bActive, CRect rectCaption, CRect /*rectButtons*/)
{
ASSERT_VALID (pDC);
CBCGPDrawManager dm (*pDC);
if (!bActive)
{
dm.FillGradient (rectCaption,
m_clrToolBarGradientDark,
m_clrToolBarGradientLight, TRUE);
}
else
{
dm.FillGradient (rectCaption,
m_clrHighlightGradientDark,
m_clrHighlightGradientLight,
TRUE);
}
return globalData.clrBarText;
}
//*********************************************************************************
void CBCGPVisualManager2003::OnFillAutoHideButtonBackground (CDC* pDC, CRect rect, CBCGPAutoHideButton* pButton)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
CBCGPDrawManager dm (*pDC);
if (pButton->IsActive ())
{
dm.FillGradient (rect,
m_clrHighlightGradientLight, m_clrHighlightGradientDark,
pButton->IsHorizontal ());
}
else
{
dm.FillGradient (rect,
m_clrBarGradientLight, m_clrBarGradientDark,
pButton->IsHorizontal ());
}
}
//*********************************************************************************
void CBCGPVisualManager2003::OnDrawAutoHideButtonBorder (CDC* pDC, CRect rectBounds, CRect rectBorderSize, CBCGPAutoHideButton* pButton)
{
ASSERT_VALID (pDC);
COLORREF clr = /*pButton->IsActive () ?
m_clrMenuItemBorder : */globalData.clrBarShadow;
COLORREF clrText = pDC->GetTextColor ();
if (rectBorderSize.left > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.top,
rectBounds.left + rectBorderSize.left,
rectBounds.bottom, clr);
}
if (rectBorderSize.top > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.top,
rectBounds.right,
rectBounds.top + rectBorderSize.top, clr);
}
if (rectBorderSize.right > 0)
{
pDC->FillSolidRect (rectBounds.right - rectBorderSize.right, rectBounds.top,
rectBounds.right,
rectBounds.bottom, clr);
}
if (rectBorderSize.bottom > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.bottom - rectBorderSize.bottom,
rectBounds.right,
rectBounds.bottom, clr);
}
pDC->SetTextColor (clrText);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -