📄 bcgpvisualmanagerxp.cpp
字号:
CBCGPToolbarComboBoxButton* /*pButton*/)
{
if (bIsHighlighted || bIsDropped)
{
rect.DeflateRect (1, 1);
pDC->Draw3dRect (&rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
}
}
//*********************************************************************************
void CBCGPVisualManagerXP::OnEraseTabsButton (CDC* pDC, CRect rect,
CBCGPButton* pButton,
CBCGPBaseTabWnd* pWndTab)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
ASSERT_VALID (pWndTab);
if (pWndTab->IsFlatTab ())
{
CBrush* pBrush = pButton->IsPressed () ?
&m_brHighlightDn : pButton->IsHighlighted () ? &m_brHighlight : &globalData.brBarFace;
pDC->FillRect (rect, pBrush);
OnFillHighlightedArea (pDC, rect, pBrush, NULL);
}
else
{
pDC->FillRect (rect, &m_brTabBack);
}
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnDrawTabsButtonBorder (CDC* pDC, CRect& rect,
CBCGPButton* pButton, UINT uiState,
CBCGPBaseTabWnd* pWndTab)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
ASSERT_VALID (pWndTab);
if (pWndTab->IsFlatTab ())
{
if (pButton->IsPushed () || pButton->IsHighlighted ())
{
COLORREF clrDark = globalData.clrBarDkShadow;
pDC->Draw3dRect (rect, clrDark, clrDark);
}
}
else
{
if (pButton->IsPushed () || pButton->IsHighlighted ())
{
if (pButton->IsPressed ())
{
pDC->Draw3dRect (rect, globalData.clrBarDkShadow, m_clrGripper);
}
else
{
pDC->Draw3dRect (rect, m_clrGripper, globalData.clrBarDkShadow);
}
}
}
}
//*********************************************************************************
COLORREF CBCGPVisualManagerXP::OnFillMiniFrameCaption (CDC* pDC,
CRect rectCaption,
CBCGPMiniFrameWnd* pFrameWnd,
BOOL bActive)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pFrameWnd);
BOOL bIsToolBar = FALSE;
BOOL bIsTasksPane = pFrameWnd->IsKindOf( RUNTIME_CLASS( CBCGPTaskPaneMiniFrameWnd ) );
if (DYNAMIC_DOWNCAST (CBCGPBaseToolBar, pFrameWnd->GetControlBar ()) != NULL)
{
bActive = FALSE;
bIsToolBar = TRUE;
}
if (bIsToolBar)
{
pDC->FillRect (rectCaption, &m_brFloatToolBarBorder);
return globalData.clrCaptionText;
}
else if (bIsTasksPane)
{
pDC->FillRect (rectCaption, &globalData.brBarFace);
return globalData.clrBarText;
}
pDC->FillRect (rectCaption,
bActive ? &globalData.brActiveCaption : &globalData.brInactiveCaption);
// get the text color
return globalData.clrCaptionText;
}
//**************************************************************************************
void CBCGPVisualManagerXP::OnDrawMiniFrameBorder (
CDC* pDC, CBCGPMiniFrameWnd* pFrameWnd,
CRect rectBorder, CRect rectBorderSize)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pFrameWnd);
BOOL bIsTasksPane = pFrameWnd->IsKindOf( RUNTIME_CLASS( CBCGPTaskPaneMiniFrameWnd ) );
if (bIsTasksPane)
{
CBrush* pOldBrush = pDC->SelectObject (&m_brFloatToolBarBorder);
ASSERT (pOldBrush != NULL);
pDC->PatBlt (rectBorder.left, rectBorder.top, rectBorderSize.left, rectBorder.Height (), PATCOPY);
pDC->PatBlt (rectBorder.left, rectBorder.top, rectBorder.Width (), rectBorderSize.top, PATCOPY);
pDC->PatBlt (rectBorder.right - rectBorderSize.right, rectBorder.top, rectBorderSize.right, rectBorder.Height (), PATCOPY);
pDC->PatBlt (rectBorder.left, rectBorder.bottom - rectBorderSize.bottom, rectBorder.Width (), rectBorderSize.bottom, PATCOPY);
rectBorderSize.DeflateRect (2, 2);
rectBorder.DeflateRect (2, 2);
pDC->SelectObject (bIsTasksPane ? &globalData.brLight : &globalData.brBarFace);
pDC->PatBlt (rectBorder.left, rectBorder.top + 1, rectBorderSize.left, rectBorder.Height () - 2, PATCOPY);
pDC->PatBlt (rectBorder.left + 1, rectBorder.top, rectBorder.Width () - 2, rectBorderSize.top, PATCOPY);
pDC->PatBlt (rectBorder.right - rectBorderSize.right, rectBorder.top + 1, rectBorderSize.right, rectBorder.Height () - 2, PATCOPY);
pDC->PatBlt (rectBorder.left + 1, rectBorder.bottom - rectBorderSize.bottom, rectBorder.Width () - 2, rectBorderSize.bottom, PATCOPY);
pDC->SelectObject (pOldBrush);
}
else
{
CBCGPVisualManager::OnDrawMiniFrameBorder (pDC, pFrameWnd, rectBorder, rectBorderSize);
}
}
//**************************************************************************************
void CBCGPVisualManagerXP::OnDrawFloatingToolbarBorder (
CDC* pDC, CBCGPBaseToolBar* /*pToolBar*/,
CRect rectBorder, CRect rectBorderSize)
{
ASSERT_VALID (pDC);
CBrush* pOldBrush = pDC->SelectObject (&m_brFloatToolBarBorder);
ASSERT (pOldBrush != NULL);
pDC->PatBlt (rectBorder.left, rectBorder.top, rectBorderSize.left, rectBorder.Height (), PATCOPY);
pDC->PatBlt (rectBorder.left, rectBorder.top, rectBorder.Width (), rectBorderSize.top, PATCOPY);
pDC->PatBlt (rectBorder.right - rectBorderSize.right, rectBorder.top, rectBorderSize.right, rectBorder.Height (), PATCOPY);
pDC->PatBlt (rectBorder.left, rectBorder.bottom - rectBorderSize.bottom, rectBorder.Width (), rectBorderSize.bottom, PATCOPY);
rectBorderSize.DeflateRect (2, 2);
rectBorder.DeflateRect (2, 2);
pDC->SelectObject (&globalData.brBarFace);
pDC->PatBlt (rectBorder.left, rectBorder.top + 1, rectBorderSize.left, rectBorder.Height () - 2, PATCOPY);
pDC->PatBlt (rectBorder.left + 1, rectBorder.top, rectBorder.Width () - 2, rectBorderSize.top, PATCOPY);
pDC->PatBlt (rectBorder.right - rectBorderSize.right, rectBorder.top + 1, rectBorderSize.right, rectBorder.Height () - 2, PATCOPY);
pDC->PatBlt (rectBorder.left + 1, rectBorder.bottom - rectBorderSize.bottom, rectBorder.Width () - 2, rectBorderSize.bottom, PATCOPY);
pDC->SelectObject (pOldBrush);
}
//**************************************************************************************
COLORREF CBCGPVisualManagerXP::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.clrGrayedText : globalData.clrBarText;
}
if (state == ButtonsIsHighlighted &&
(pButton->m_nStyle & (TBBS_PRESSED | TBBS_CHECKED)))
{
return globalData.clrTextHilite;
}
return CBCGPVisualManager::GetToolbarButtonTextColor (pButton, state);
}
//*************************************************************************************
void CBCGPVisualManagerXP::OnDrawEditBorder (CDC* pDC, CRect rect,
BOOL bDisabled,
BOOL bIsHighlighted,
CBCGPToolbarEditBoxButton* pButton)
{
if (!CBCGPToolbarEditBoxButton::IsFlatMode ())
{
CBCGPVisualManager::OnDrawEditBorder (pDC, rect, bDisabled, bIsHighlighted, pButton);
return;
}
if (bIsHighlighted)
{
pDC->Draw3dRect (&rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
}
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnDrawTasksGroupCaption(CDC* pDC, CBCGPTasksGroup* pGroup,
BOOL bIsHighlighted, BOOL /*bIsSelected*/, BOOL bCanCollapse)
{
ASSERT_VALID(pDC);
ASSERT(pGroup != NULL);
// ------------------------------
// Draw group caption (Office XP)
// ------------------------------
// ---------------------------
// 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 (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 - sizeButton.cx);
rectButton.top = max(rectButton.top, rectButton.bottom - sizeButton.cy);
if (rectButton.Width () >= sizeButton.cx && rectButton.Height () >= sizeButton.cy)
{
if (bIsHighlighted)
{
// Draw button frame
CPen pen (PS_SOLID, 1, globalData.clrHilite);
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
CBrush* pBrushOld = (CBrush*) pDC->SelectObject (&m_brHighlight);
COLORREF clrBckOld = pDC->GetBkColor ();
pDC->Rectangle(&rectButton);
pDC->SetBkColor (clrBckOld);
pDC->SelectObject (pPenOld);
pDC->SelectObject (pBrushOld);
}
if (!pGroup->m_bIsCollapsed)
{
CMenuImages::Draw(pDC, CMenuImages::IdArowUp, rectButton.TopLeft());
}
else
{
CMenuImages::Draw(pDC, CMenuImages::IdArowDown, rectButton.TopLeft());
}
}
}
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnFillTasksGroupInterior(CDC* pDC, CRect rect, BOOL /*bSpecial*/)
{
ASSERT_VALID(pDC);
// Draw underline
CPen pen (PS_SOLID, 1, globalData.clrBarShadow);
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
pDC->MoveTo (rect.left, rect.top);
pDC->LineTo (rect.right, rect.top);
pDC->SelectObject (&pPenOld);
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnDrawTasksGroupAreaBorder(CDC* /*pDC*/, CRect /*rect*/,
BOOL /*bSpecial*/, BOOL /*bNoTitle*/)
{
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnDrawTask(CDC* pDC, CBCGPTask* pTask, CImageList* pIcons, BOOL bIsHighlighted, BOOL /*bIsSelected*/)
{
ASSERT_VALID(pDC);
ASSERT_VALID(pIcons);
ASSERT(pTask != NULL);
CRect rectText = pTask->m_rect;
if (pTask->m_bIsSeparator)
{
CPen pen (PS_SOLID, 1, globalData.clrBarShadow);
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
pDC->MoveTo (rectText.left, rectText.CenterPoint ().y);
pDC->LineTo (rectText.right, rectText.CenterPoint ().y);
pDC->SelectObject (&pPenOld);
return;
}
// ---------
// Draw icon
// ---------
CSize sizeIcon(0, 0);
::ImageList_GetIconSize (pIcons->m_hImageList, (int*) &sizeIcon.cx, (int*) &sizeIcon.cy);
if (pTask->m_nIcon >= 0 && sizeIcon.cx > 0)
{
pIcons->Draw (pDC, pTask->m_nIcon, rectText.TopLeft (), ILD_TRANSPARENT);
}
int nTaskPaneOffset = pTask->m_pGroup->m_pPage->m_pTaskPane->GetGroupCaptionHorzOffset();
rectText.left += sizeIcon.cx + (nTaskPaneOffset != -1 ? nTaskPaneOffset : m_nTasksIconHorzOffset);
// ---------
// Draw text
// ---------
BOOL bIsLabel = (pTask->m_uiCommandID == 0);
CFont* pFontOld = NULL;
COLORREF clrTextOld = pDC->GetTextColor();
if (bIsLabel)
{
pFontOld = pDC->SelectObject (&globalData.fontRegular);
pDC->SetTextColor (globalData.clrWindowText);
}
else if (!pTask->m_bEnabled)
{
pDC->SetTextColor (globalData.clrGrayedText);
pFontOld = pDC->SelectObject (&globalData.fontRegular);
}
else if (bIsHighlighted)
{
pDC->SetTextColor (globalData.clrHotText);
pFontOld = pDC->SelectObject (&globalData.fontUnderline);
}
else
{
pDC->SetTextColor (globalData.clrHotText);
pFontOld = pDC->SelectObject (&globalData.fontRegular);
}
int nBkModeOld = pDC->SetBkMode(TRANSPARENT);
pDC->DrawText (pTask->m_strName, rectText, DT_SINGLELINE | DT_VCENTER);
pDC->SetBkMode(nBkModeOld);
pDC->SelectObject (pFontOld);
pDC->SetTextColor (clrTextOld);
}
//**********************************************************************************
void CBCGPVisualManagerXP::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.brWindow);
if (bHilited)
{
pDC->FillRect (rect, &m_brHighlight);
pDC->Draw3dRect (rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
}
CPoint point (
rect.left + (rect.Width () - rectImage.Width ()) / 2,
rect.top + (rect.Height () - rectImage.Height ()) / 2);
CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, point);
}
//**********************************************************************************
void CBCGPVisualManagerXP::OnDrawSpinButtons(CDC *pDC, const CRect &rectSpin, int iState, BOOL bOrientation)
{
ASSERT_VALID(pDC);
ASSERT_VALID (this);
CRect rect[2];
rect[0] = rect[1] = rectSpin;
if (!bOrientation)
{
rect[0].DeflateRect(0, 0, 0, rect[0].Height() / 2);
rect[1].top = rect[0].bottom ;
}
else
{
rect[0].DeflateRect(0, 0, rect[0].Width() / 2, 0);
rect[1].left = rect[0].right ;
}
//pDC->FillSolidRect (rectSpin, globalData.clrBtnFace);
//pDC->Draw3dRect (rectSpin, globalData.clrBtnHilite, globalData.clrBtnHilite);
CMenuImages::IMAGES_IDS id[2][2] = {{CMenuImages::IdArowUp, CMenuImages::IdArowDown}, {CMenuImages::IdArowLeft, CMenuImages::IdArowRight}};
int idxPressed = (iState & (SPIN_PRESSEDUP | SPIN_PRESSEDDOWN)) - 1;
BOOL bIsHighlighted = (iState & SPIN_HIGHLIGHTED);
BOOL bDisabled = iState & SPIN_DISABLED;
for(int i = 0; i < 2; i ++)
{
CPoint pointTriangle (
rect[i].left + (rect[i].Width () - CMenuImages::Size ().cx) / 2 ,
rect[i].top + (rect[i].Height () - CMenuImages::Size ().cy) / 2 );
/* if (idxPressed == i)
{
pDC->Draw3dRect (&rect[i], globalData.clrBtnShadow, globalData.clrBtnHilite);
}
else //if (bIsHighlighted)
{
pDC->Draw3dRect (&rect[i], globalData.clrBtnHilite, globalData.clrBtnShadow);
}
CMenuImages::Draw (pDC, id[bOrientation][i], pointTriangle,
bDisabled ? CMenuImages::ImageGray : CMenuImages::ImageBlack);*/
if (idxPressed == i || bIsHighlighted)
{
OnFillHighlightedArea (pDC, rect [i],
(idxPressed == i) ? &m_brHighlightDn : &m_brHighlight, NULL);
}
else
{
pDC->FillSolidRect (rect[i], globalData.clrBarFace);
pDC->Draw3dRect (rect[i], globalData.clrBarHilite, globalData.clrBarHilite);
}
CMenuImages::Draw (pDC, id[bOrientation][i], pointTriangle,
bDisabled ? CMenuImages::ImageGray : (idxPressed == i && bIsHighlighted) ?
CMenuImages::ImageWhite : CMenuImages::ImageBlack);
}
if (bIsHighlighted)
{
CPen pen (PS_SOLID, 1, m_clrMenuItemBorder);
CPen* pOldPen = pDC->SelectObject (&pen);
ASSERT (pOldPen != NULL);
//pDC->Rectangle (rect[i]);
pDC->MoveTo (rectSpin.left, rectSpin.top);
pDC->LineTo (rectSpin.left, rectSpin.bottom);
pDC->LineTo (rectSpin.right, rectSpin.bottom);
pDC->LineTo (rectSpin.right, rectSpin.top);
pDC->LineTo (rectSpin.left, rectSpin.top);
if (!bOrientation)
{
pDC->MoveTo (rectSpin.left, rectSpin.top + rectSpin.Height () / 2);
pDC->LineTo (rectSpin.right, rectSpin.top + rectSpin.Height () / 2);
}
else
{
pDC->MoveTo (rectSpin.left + rectSpin.Width () / 2, rectSpin.top);
pDC->LineTo (rectSpin.left + rectSpin.Width () / 2, rectSpin.bottom);
}
pDC->SelectObject (pOldPen);
}
}
//*************************************************************************************
void CBCGPVisualManagerXP::OnDrawControlBorder (CWnd* pWndCtrl)
{
CBCGPVisualManager::OnDrawControlBorder (pWndCtrl);
}
//***********************************************************************************
void CBCGPVisualManagerXP::OnFillHighlightedArea (CDC* pDC, CRect rect,
CBrush* pBrush, CBCGPToolbarButton* /*pButton*/)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pBrush);
pDC->FillRect (rect, pBrush);
}
//********************************************************************************
void CBCGPVisualManagerXP::OnDrawSplitterBorder (CDC* pDC, CBCGPSplitterWnd* pSplitterWnd, CRect rect)
{
ASSERT_VALID(pDC);
pDC->Draw3dRect (rect, globalData.clrBarShadow, globalData.clrBarShadow);
rect.InflateRect(-CX_BORDER, -CY_BORDER);
pDC->Draw3dRect (rect, globalData.clrBarFace, globalData.clrBarFace);
}
//********************************************************************************
void CBCGPVisualManagerXP::OnDrawSplitterBox (CDC* pDC, CBCGPSplitterWnd* pSplitterWnd, CRect& rect)
{
ASSERT_VALID(pDC);
pDC->Draw3dRect(rect, globalData.clrBarFace, globalData.clrBarFace);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -