📄 bcgpvisualmanager.cpp
字号:
clrShadow = globalData.clrBarShadow;
}
pDC->Draw3dRect (rectPane, clrShadow, clrHilite);
}
}
//*********************************************************************************
COLORREF CBCGPVisualManager::OnFillMiniFrameCaption (CDC* pDC,
CRect rectCaption,
CBCGPMiniFrameWnd* pFrameWnd, BOOL bActive)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pFrameWnd);
if (DYNAMIC_DOWNCAST (CBCGPBaseToolBar, pFrameWnd->GetControlBar ()) != NULL)
{
bActive = TRUE;
}
CBrush br (bActive ? globalData.clrActiveCaption : globalData.clrInactiveCaption);
pDC->FillRect (rectCaption, &br);
// get the text color
return globalData.clrCaptionText;
}
//**************************************************************************************
void CBCGPVisualManager::OnDrawMiniFrameBorder (
CDC* pDC, CBCGPMiniFrameWnd* pFrameWnd,
CRect rectBorder, CRect rectBorderSize)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pFrameWnd);
BCGP_PREDOCK_STATE preDockState = pFrameWnd->GetPreDockState ();
if (preDockState == PDS_DOCK_REGULAR)
{
// draw outer edge;
pDC->Draw3dRect (rectBorder, RGB (127, 0, 0), globalData.clrBarDkShadow);
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarHilite, RGB (127, 0, 0));
}
else if (preDockState == PDS_DOCK_TO_TAB)
{
// draw outer edge;
pDC->Draw3dRect (rectBorder, RGB (0, 0, 127), globalData.clrBarDkShadow);
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarHilite, RGB (0, 0, 127));
}
else
{
// draw outer edge;
pDC->Draw3dRect (rectBorder, globalData.clrBarFace, globalData.clrBarDkShadow);
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarHilite, globalData.clrBarShadow);
}
// draw the inner egde
rectBorder.DeflateRect (rectBorderSize.right - 2, rectBorderSize.top - 2);
pDC->Draw3dRect (rectBorder, globalData.clrBarFace, globalData.clrBarFace);
rectBorder.InflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarFace, globalData.clrBarFace);
}
//**************************************************************************************
void CBCGPVisualManager::OnDrawFloatingToolbarBorder (
CDC* pDC, CBCGPBaseToolBar* pToolBar,
CRect rectBorder, CRect /*rectBorderSize*/)
{
ASSERT_VALID (pDC);
pDC->Draw3dRect (rectBorder, globalData.clrBarFace, globalData.clrBarDkShadow);
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarHilite, globalData.clrBarShadow);
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (rectBorder, globalData.clrBarFace, globalData.clrBarFace);
}
//**************************************************************************************
COLORREF CBCGPVisualManager::GetToolbarButtonTextColor (CBCGPToolbarButton* pButton,
CBCGPVisualManager::BCGBUTTON_STATE state)
{
ASSERT_VALID (pButton);
BOOL bDisabled = (CBCGPToolBar::IsCustomizeMode () && !pButton->IsEditable ()) ||
(!CBCGPToolBar::IsCustomizeMode () && (pButton->m_nStyle & TBBS_DISABLED));
if (pButton->IsKindOf (RUNTIME_CLASS (CBCGPOutlookButton)))
{
return bDisabled ? globalData.clrBarFace : globalData.clrWindow;
}
if (pButton->IsKindOf (RUNTIME_CLASS (CBCGPCalendarButton)))
{
CBCGPCalendarButton* pCalendarButton = (CBCGPCalendarButton*) pButton;
COLORREF clrText = pCalendarButton->GetTextColor ();
if (clrText != (COLORREF) -1)
{
return clrText;
}
if (!pCalendarButton->IsCurrMonth ())
{
return globalData.clrGrayedText;
}
}
return (bDisabled ? globalData.clrGrayedText :
(state == ButtonsIsHighlighted) ?
CBCGPToolBar::GetHotTextColor () : globalData.clrBarText);
}
//***************************************************************************************
void CBCGPVisualManager::OnFillOutlookPageButton (CDC* pDC,
const CRect& rect,
BOOL /*bIsHighlighted*/, BOOL /*bIsPressed*/,
COLORREF& clrText)
{
ASSERT_VALID (pDC);
pDC->FillRect (rect, &globalData.brBarFace);
clrText = globalData.clrBarText;
}
//****************************************************************************************
void CBCGPVisualManager::OnDrawOutlookPageButtonBorder (
CDC* pDC, CRect& rectBtn, BOOL bIsHighlighted, BOOL bIsPressed)
{
ASSERT_VALID (pDC);
if (bIsHighlighted && bIsPressed)
{
pDC->Draw3dRect (rectBtn, globalData.clrBarDkShadow, globalData.clrBarFace);
rectBtn.DeflateRect (1, 1);
pDC->Draw3dRect (rectBtn, globalData.clrBarShadow, globalData.clrBarHilite);
}
else
{
if (bIsHighlighted || bIsPressed)
{
pDC->Draw3dRect (rectBtn, globalData.clrBarFace, globalData.clrBarDkShadow);
rectBtn.DeflateRect (1, 1);
}
pDC->Draw3dRect (rectBtn, globalData.clrBarHilite, globalData.clrBarShadow);
}
rectBtn.DeflateRect (1, 1);
}
//**********************************************************************************
COLORREF CBCGPVisualManager::GetCaptionBarTextColor (CBCGPCaptionBar* /*pBar*/)
{
return globalData.clrWindow;
}
//***********************************************************************************
void CBCGPVisualManager::OnDrawCaptionBarBorder (CDC* pDC,
CBCGPCaptionBar* /*pBar*/, CRect rect, COLORREF clrBarBorder, BOOL bFlatBorder)
{
ASSERT_VALID (pDC);
if (clrBarBorder == (COLORREF) -1)
{
pDC->FillRect (rect, &globalData.brBarFace);
}
else
{
CBrush brBorder;
brBorder.CreateSolidBrush (clrBarBorder);
pDC->FillRect (rect, &brBorder);
}
if (!bFlatBorder)
{
pDC->Draw3dRect (rect, globalData.clrBarHilite, globalData.clrBarShadow);
}
}
//**************************************************************************************
void CBCGPVisualManager::OnDrawStatusBarProgress (CDC* pDC, CBCGPStatusBar* /*pStatusBar*/,
CRect rectProgress, int nProgressTotal, int nProgressCurr,
COLORREF clrBar, COLORREF clrProgressBarDest, COLORREF clrProgressText,
BOOL bProgressText)
{
ASSERT_VALID (pDC);
if (nProgressTotal == 0)
{
return;
}
CRect rectComplete = rectProgress;
rectComplete.right = rectComplete.left +
nProgressCurr * rectComplete.Width () / nProgressTotal;
if (clrProgressBarDest == (COLORREF)-1)
{
// one-color bar
CBrush br (clrBar);
pDC->FillRect (rectComplete, &br);
}
else
{
// gradient bar:
CBCGPDrawManager dm (*pDC);
dm.FillGradient (rectComplete, clrBar, clrProgressBarDest, FALSE);
}
if (bProgressText)
{
CString strText;
strText.Format (_T("%d%%"), nProgressCurr * 100 / nProgressTotal);
COLORREF clrText = pDC->SetTextColor (globalData.clrBarText);
pDC->DrawText (strText, rectProgress, DT_CENTER | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX);
CRgn rgn;
rgn.CreateRectRgnIndirect (rectComplete);
pDC->SelectClipRgn (&rgn);
pDC->SetTextColor (clrProgressText == (COLORREF)-1 ?
globalData.clrTextHilite : clrProgressText);
pDC->DrawText (strText, rectProgress, DT_CENTER | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX);
pDC->SelectClipRgn (NULL);
pDC->SetTextColor (clrText);
}
}
//****************************************************************************************
void CBCGPVisualManager::OnFillHeaderCtrlBackground (CBCGPHeaderCtrl* pCtrl,
CDC* pDC, CRect rect)
{
ASSERT_VALID (pDC);
pDC->FillRect (rect,
pCtrl->IsDialogControl () ? &globalData.brBtnFace : &globalData.brBarFace);
}
//****************************************************************************************
void CBCGPVisualManager::OnDrawHeaderCtrlBorder (CBCGPHeaderCtrl* pCtrl, CDC* pDC,
CRect& rect, BOOL bIsPressed, BOOL /*bIsHighlighted*/)
{
ASSERT_VALID (pDC);
if (bIsPressed)
{
if (pCtrl->IsDialogControl ())
{
pDC->Draw3dRect (rect, globalData.clrBtnShadow, globalData.clrBtnShadow);
}
else
{
pDC->Draw3dRect (rect, globalData.clrBarShadow, globalData.clrBarShadow);
}
rect.left++;
rect.top++;
}
else
{
if (pCtrl->IsDialogControl ())
{
pDC->Draw3dRect (rect, globalData.clrBtnHilite, globalData.clrBtnShadow);
}
else
{
pDC->Draw3dRect (rect, globalData.clrBarHilite, globalData.clrBarShadow);
}
}
}
//*****************************************************************************************
void CBCGPVisualManager::OnDrawHeaderCtrlSortArrow (CBCGPHeaderCtrl* pCtrl,
CDC* pDC,
CRect& rectArrow, BOOL bIsUp)
{
CPen penLight (1, PS_SOLID,
pCtrl->IsDialogControl () ? globalData.clrBtnHilite : globalData.clrBarHilite);
CPen penDark (1, PS_SOLID,
pCtrl->IsDialogControl () ? globalData.clrBtnDkShadow : globalData.clrBarDkShadow);
CPen* pPenOld = pDC->SelectObject (&penLight);
ASSERT_VALID (pPenOld);
if (!bIsUp)
{
pDC->MoveTo (rectArrow.right, rectArrow.top);
pDC->LineTo (rectArrow.CenterPoint ().x, rectArrow.bottom);
pDC->SelectObject (&penDark);
pDC->LineTo (rectArrow.left, rectArrow.top);
pDC->LineTo (rectArrow.right, rectArrow.top);
}
else
{
pDC->MoveTo (rectArrow.left, rectArrow.bottom);
pDC->LineTo (rectArrow.right, rectArrow.bottom);
pDC->LineTo (rectArrow.CenterPoint ().x, rectArrow.top);
pDC->SelectObject (&penDark);
pDC->LineTo (rectArrow.left, rectArrow.bottom);
}
pDC->SelectObject (pPenOld);
}
//*****************************************************************************************
void CBCGPVisualManager::OnDrawStatusBarSizeBox (CDC* pDC, CBCGPStatusBar* /*pStatBar*/,
CRect rectSizeBox)
{
ASSERT_VALID (pDC);
CFont* pOldFont = pDC->SelectObject (&globalData.fontMarlett);
ASSERT (pOldFont != NULL);
const CString strSizeBox (_T("o")); // Char of the sizing box in "Marlett" font
UINT nTextAlign = pDC->SetTextAlign (TA_RIGHT | TA_BOTTOM);
COLORREF clrText = pDC->SetTextColor (globalData.clrBarShadow);
pDC->ExtTextOut (rectSizeBox.right, rectSizeBox.bottom,
ETO_CLIPPED, &rectSizeBox, strSizeBox, NULL);
pDC->SelectObject (pOldFont);
pDC->SetTextColor (clrText);
pDC->SetTextAlign (nTextAlign);
}
//*************************************************************************************
void CBCGPVisualManager::OnDrawEditBorder (CDC* pDC, CRect rect,
BOOL /*bDisabled*/,
BOOL bIsHighlighted,
CBCGPToolbarEditBoxButton* /*pButton*/)
{
ASSERT_VALID (pDC);
if (bIsHighlighted)
{
pDC->DrawEdge (rect, EDGE_SUNKEN, BF_RECT);
}
}
//**********************************************************************************
void CBCGPVisualManager::OnFillTasksPaneBackground(CDC* pDC, CRect rectWorkArea)
{
ASSERT_VALID (pDC);
pDC->FillRect (rectWorkArea, &globalData.brWindow);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawTasksGroupCaption(CDC* pDC, CBCGPTasksGroup* pGroup,
BOOL bIsHighlighted, BOOL /*bIsSelected*/, BOOL bCanCollapse)
{
ASSERT_VALID(pDC);
ASSERT(pGroup != NULL);
// ---------------------------------
// Draw caption background (Windows)
// ---------------------------------
COLORREF clrBckOld = pDC->GetBkColor ();
pDC->FillSolidRect(pGroup->m_rect,
(pGroup->m_bIsSpecial ? globalData.clrHilite : globalData.clrBarFace));
pDC->SetBkColor (clrBckOld);
// ---------------------------
// 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 ?
globalData.clrWindow : globalData.clrWindowText);
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_bIsSpecial)
{
if (!pGroup->m_bIsCollapsed)
{
CMenuImages::Draw(pDC, CMenuImages::IdArowUp, rectButton.TopLeft());
}
else
{
CMenuImages::Draw(pDC, CMenuImages::IdArowDown, rectButton.TopLeft());
}
}
else
{
if (!pGroup->m_bIsCollapsed)
{
CMenuImages::Draw(pDC, CMenuImages::IdArowUp, rectButton.TopLeft());
}
else
{
CMenuImages::Draw(pDC, CMenuImages::IdArowDown, rectButton.TopLeft());
}
}
}
}
}
//**********************************************************************************
void CBCGPVisualManager::OnFillTasksGroupInterior(CDC* /*pDC*/, CRect /*rect*/, BOOL /*bSpecial*/)
{
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawTasksGroupAreaBorder(CDC* pDC, CRect rect, BOOL bSpecial,
BOOL bNoTitle)
{
ASSERT_VALID(pDC);
// Draw caption background:
CPen pen (PS_SOLID, 1, (bSpecial ? globalData.clrHilite : globalData.clrBarFace));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -