📄 bcgpvisualmanagerxp.cpp
字号:
if (dwBarStyle & CBRS_BORDER_LEFT)
pDC->FillSolidRect(0, 0, 1, rect.Height() - 1, globalData.clrBarFace);
if (dwBarStyle & CBRS_BORDER_TOP)
pDC->FillSolidRect(0, 0, rect.Width()-1 , 1, globalData.clrBarFace);
if (dwBarStyle & CBRS_BORDER_RIGHT)
pDC->FillSolidRect(rect.right, 0/*RGL~:1*/, -1,
rect.Height()/*RGL-: - 1*/, globalData.clrBarFace);
if (dwBarStyle & CBRS_BORDER_BOTTOM)
pDC->FillSolidRect(0, rect.bottom, rect.Width()-1, -1, globalData.clrBarFace);
if (dwBarStyle & CBRS_BORDER_LEFT)
++rect.left;
if (dwBarStyle & CBRS_BORDER_TOP)
++rect.top;
if (dwBarStyle & CBRS_BORDER_RIGHT)
--rect.right;
if (dwBarStyle & CBRS_BORDER_BOTTOM)
--rect.bottom;
// Restore Bk color:
pDC->SetBkColor (clrBckOld);
}
//****************************************************************************************
void CBCGPVisualManagerXP::OnFillBarBackground (CDC* pDC, CBCGPBaseControlBar* pBar,
CRect rectClient, CRect rectClip,
BOOL bNCArea)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pBar);
if (rectClip.IsRectEmpty ())
{
rectClip = rectClient;
}
CRuntimeClass* pBarClass = pBar->GetRuntimeClass ();
if (pBarClass == NULL || pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPMenuBar)))
{
CBCGPVisualManager::OnFillBarBackground (pDC, pBar, rectClient, rectClip);
return;
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPOutlookBarPane)))
{
CBCGPOutlookBarPane* pOlBar = DYNAMIC_DOWNCAST (CBCGPOutlookBarPane, pBar);
ASSERT_VALID (pOlBar);
if (pOlBar->IsBackgroundTexture ())
{
CBCGPVisualManager::OnFillBarBackground (pDC, pBar, rectClient, rectClip);
return;
}
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPColorBar)))
{
if (pBar->IsDialogControl ())
{
CBCGPVisualManager::OnFillBarBackground (pDC, pBar, rectClient, rectClip);
}
else
{
pDC->FillRect (rectClip,
((CBCGPColorBar*) pBar)->IsTearOff () ?
&m_brBarBkgnd : &m_brMenuLight);
}
return;
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPCalendarBar)))
{
pDC->FillRect (rectClip, &m_brMenuLight);
CRect rectImages = rectClient;
rectImages.right = rectImages.left + CBCGPToolBar::GetMenuImageSize ().cx +
2 * GetMenuImageMargin () + 1;
return;
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPPopupMenuBar)))
{
pDC->FillRect (rectClip, &m_brMenuLight);
BOOL bQuickMode = FALSE;
CBCGPPopupMenuBar* pMenuBar = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, pBar);
if (!pMenuBar->m_bDisableSideBarInXPMode)
{
CWnd* pWnd = pMenuBar->GetParent();
if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CBCGPPopupMenu)))
{
CBCGPPopupMenu* pMenu = DYNAMIC_DOWNCAST (CBCGPPopupMenu, pWnd);
if (pMenu->IsCustomizePane())
{
bQuickMode = TRUE;
}
}
CRect rectImages = rectClient;
if (bQuickMode)
{
rectImages.right = rectImages.left + 2*CBCGPToolBar::GetMenuImageSize ().cx +
4 * GetMenuImageMargin () + 4;
}
else
{
rectImages.right = rectImages.left + CBCGPToolBar::GetMenuImageSize ().cx +
2 * GetMenuImageMargin () + 1;
}
pDC->FillRect (rectImages, &m_brBarBkgnd);
}
return;
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPToolBar)))
{
if (pBar->IsDialogControl ())
{
CBCGPVisualManager::OnFillBarBackground (pDC, pBar, rectClient, rectClip);
}
else
{
pDC->FillRect (rectClip, &m_brBarBkgnd);
}
return;
}
if (pBarClass->IsDerivedFrom (RUNTIME_CLASS (CBCGPAutoHideDockBar)))
{
pDC->FillRect (rectClip, &m_brTabBack);
return;
}
CBCGPVisualManager::OnFillBarBackground (pDC, pBar, rectClient, rectClip);
}
//**************************************************************************************
void CBCGPVisualManagerXP::OnDrawSeparator (CDC* pDC, CBCGPBaseControlBar* pBar,
CRect rect, BOOL bHorz)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pBar);
if (pBar->IsDialogControl ())
{
CBCGPVisualManager::OnDrawSeparator (pDC, pBar, rect, bHorz);
return;
}
CRect rectSeparator = rect;
CPen* pOldPen = pDC->SelectObject (&m_penSeparator);
ASSERT (pOldPen != NULL);
int x1, x2;
int y1, y2;
if (bHorz)
{
x1 = x2 = (rect.left + rect.right) / 2;
y1 = rect.top;
y2 = rect.bottom - 1;
}
else
{
y1 = y2 = (rect.top + rect.bottom) / 2;
x1 = rect.left;
x2 = rect.right;
if (pBar->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar)) &&
!pBar->IsKindOf (RUNTIME_CLASS (CBCGPColorBar)) &&
!pBar->IsKindOf (RUNTIME_CLASS (CBCGPCalendarBar)))
{
x1 = rect.left + CBCGPToolBar::GetMenuImageSize ().cx +
GetMenuImageMargin () + 1;
x2 = 32767;
//---------------------------------
// Maybe Quick Customize separator
//---------------------------------
if (pBar->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar)))
{
CWnd* pWnd = pBar->GetParent();
if (pWnd != NULL && pWnd->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenu)))
{
CBCGPPopupMenu* pMenu = (CBCGPPopupMenu*)pWnd;
if (pMenu->IsCustomizePane())
{
x1 = rect.left + 2*CBCGPToolBar::GetMenuImageSize ().cx +
3*GetMenuImageMargin () + 2;
}
}
}
}
}
pDC->MoveTo (x1, y1);
pDC->LineTo (x2, y2);
pDC->SelectObject (pOldPen);
}
//**************************************************************************************
void CBCGPVisualManagerXP::OnDrawButtonBorder (CDC* pDC,
CBCGPToolbarButton* pButton, CRect rect, BCGBUTTON_STATE state)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
if (state != ButtonsIsPressed && state != ButtonsIsHighlighted)
{
ASSERT ((pButton->m_nStyle & TBBS_CHECKED) == 0);
return;
}
COLORREF clrBorder = m_clrMenuItemBorder;
CBCGPToolbarMenuButton* pMenuButton =
DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
BOOL bIsMenuButton = pMenuButton != NULL;
BOOL bIsPopupMenu = bIsMenuButton &&
pMenuButton->GetParentWnd () != NULL &&
pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));
if (!bIsPopupMenu || state != ButtonsIsHighlighted)
{
rect.right--;
rect.bottom--;
}
if (bIsMenuButton && !bIsPopupMenu &&
pMenuButton->IsDroppedDown ())
{
CBCGPPopupMenu* pPopupMenu= pMenuButton->GetPopupMenu ();
if (pPopupMenu != NULL &&
(pPopupMenu->IsWindowVisible () || pPopupMenu->IsShown()))
{
clrBorder = m_clrMenuBorder;
ExtendMenuButton (pMenuButton, rect);
if (CBCGPMenuBar::IsMenuShadows () &&
!CBCGPToolBar::IsCustomizeMode () &&
globalData.m_nBitsPerPixel > 8)
{
CBCGPDrawManager dm (*pDC);
dm.DrawShadow (rect, m_nMenuShadowDepth, 100, 75, NULL, NULL,
m_clrMenuShadowBase);
}
}
}
switch (state)
{
case ButtonsIsPressed:
case ButtonsIsHighlighted:
if (bIsPopupMenu && (pButton->m_nStyle & TBBS_CHECKED))
{
rect.bottom ++;
}
pDC->Draw3dRect (rect, clrBorder, clrBorder);
}
}
//*****************************************************************************************
void CBCGPVisualManagerXP::OnFillButtonInterior (CDC* pDC,
CBCGPToolbarButton* pButton, CRect rect, CBCGPVisualManager::BCGBUTTON_STATE state)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
if (state != ButtonsIsPressed && state != ButtonsIsHighlighted)
{
return;
}
if (CBCGPToolBar::IsCustomizeMode ())
{
return;
}
CBCGPToolbarMenuButton* pMenuButton =
DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
BOOL bIsMenuButton = pMenuButton != NULL;
BOOL bIsPopupMenu = bIsMenuButton &&
pMenuButton->GetParentWnd () != NULL &&
pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));
if (!bIsPopupMenu && !m_bEnableToolbarButtonFill)
{
return;
}
if (!bIsPopupMenu || state != ButtonsIsHighlighted)
{
rect.right --;
rect.bottom --;
}
CBrush* pBrush = ((pButton->m_nStyle & TBBS_PRESSED) && !bIsPopupMenu) ?
&m_brHighlightDn : &m_brHighlight;
if (bIsMenuButton && !bIsPopupMenu && pMenuButton->IsDroppedDown ())
{
ExtendMenuButton (pMenuButton, rect);
pBrush = &m_brBarBkgnd;
}
if (pButton->m_nStyle & TBBS_CHECKED)
{
pBrush = (state == ButtonsIsHighlighted) ?
&m_brHighlightDn : &m_brHighlightChecked;
}
if (bIsMenuButton && (pButton->m_nStyle & TBBS_DISABLED))
{
pBrush = &m_brMenuLight;
}
switch (state)
{
case ButtonsIsPressed:
case ButtonsIsHighlighted:
if ((pButton->m_nStyle & TBBS_CHECKED) == 0)
{
rect.DeflateRect (1, 1);
}
OnFillHighlightedArea (pDC, rect, pBrush, pButton);
}
}
//************************************************************************************
void CBCGPVisualManagerXP::OnHighlightMenuItem (CDC* pDC, CBCGPToolbarMenuButton* pButton,
CRect rect, COLORREF& clrText)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
CBrush* pBrush = (pButton->m_nStyle & TBBS_DISABLED) ?
&m_brMenuLight : &m_brHighlight;
OnFillHighlightedArea (pDC, rect, pBrush, pButton);
pDC->Draw3dRect (rect, m_clrMenuItemBorder, m_clrMenuItemBorder);
//-------------------------
//For Quick Customize mode
//-------------------------
CBCGPPopupMenu* pMenu = pButton->GetPopupMenu();
if (pButton->IsQuickMode() && (pMenu != NULL)
&& (pMenu->GetSafeHwnd() != NULL))
{
CRect rectDefault = rect;
CBCGPPopupMenuBar* pMenuBar = (CBCGPPopupMenuBar*)pButton->GetParentWnd();
CBCGPPopupMenu* pPopupMenu = (CBCGPPopupMenu*)pMenuBar->GetParent();
CRect rcFrame;
CWnd* pWnd = BCGCBProGetTopLevelFrame(pMenuBar);
pWnd->GetWindowRect(rcFrame);
CRect rcMenu;
pPopupMenu->GetWindowRect(rcMenu);
if ((rcFrame.left - rcMenu.left) < 200)
{
rectDefault.right += 10;
}
if ((rcFrame.right - rcMenu.right) < 200)
{
rectDefault.left -= 10;
}
pDC->FillRect (rectDefault, &m_brBarBkgnd);
pDC->Draw3dRect (rectDefault, m_clrMenuBorder, m_clrMenuBorder);
}
CBCGPToolbarMenuButton* pMenuButton =
DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
BOOL bIsMenuButton = pMenuButton != NULL;
BOOL bIsPopupMenu = bIsMenuButton &&
pMenuButton->GetParentWnd () != NULL &&
pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));
int nRectImagesRight = 2 * CBCGPToolBar::GetMenuImageSize ().cx +
2 * GetMenuImageMargin () + 1;
if (bIsPopupMenu && rect.left > GetMenuImageMargin () - 1 &&
rect.left <= nRectImagesRight)
{
CRect rectConnect = rect;
rectConnect.right = rect.left + 1;
rectConnect.left = CBCGPToolBar::GetMenuImageSize ().cx +
2 * GetMenuImageMargin () - 1;
if (pButton->m_nStyle & TBBS_CHECKED)
{
rectConnect.left++;
}
pDC->Draw3dRect (rectConnect, m_clrMenuItemBorder, m_clrMenuItemBorder);
rectConnect.DeflateRect (0, 1);
OnFillHighlightedArea (pDC, rectConnect, pBrush, pButton);
}
// Now, we should define a menu text color...
if (pButton->m_nStyle & TBBS_DISABLED)
{
clrText = globalData.clrGrayedText;
}
else
{
if (GetRValue (m_clrHighlight) > 128 &&
GetGValue (m_clrHighlight) > 128 &&
GetBValue (m_clrHighlight) > 128)
{
clrText = RGB (0, 0, 0);
}
else
{
clrText = RGB (255, 255, 255);
}
}
}
//************************************************************************************
void CBCGPVisualManagerXP::OnHighlightRarelyUsedMenuItems (CDC* pDC, CRect rectRarelyUsed)
{
ASSERT_VALID (pDC);
CBCGPDrawManager dm (*pDC);
rectRarelyUsed.left --;
rectRarelyUsed.right = rectRarelyUsed.left + CBCGPToolBar::GetMenuImageSize ().cx +
2 * GetMenuImageMargin () + 2;
dm.HighlightRect (rectRarelyUsed, 94);
}
//***********************************************************************************
void CBCGPVisualManagerXP::OnDrawTab (CDC* pDC, CRect rectTab,
int iTab, BOOL bIsActive, const CBCGPBaseTabWnd* pTabWnd)
{
#define TEXT_MARGIN 4
#define IMAGE_MARGIN 4
ASSERT_VALID (pTabWnd);
ASSERT_VALID (pDC);
if (pTabWnd->IsFlatTab () || pTabWnd->IsOneNoteStyle ())
{
CBCGPVisualManager::OnDrawTab (pDC, rectTab, iTab, bIsActive, pTabWnd);
return;
}
COLORREF clrDark;
COLORREF clrBlack;
COLORREF clrHighlight;
COLORREF clrFace;
COLORREF clrDarkShadow;
COLORREF clrLight;
CBrush* pbrFace = NULL;
CBrush* pbrBlack = NULL;
GetTabFrameColors (
pTabWnd, clrDark, clrBlack, clrHighlight, clrFace, clrDarkShadow, clrLight,
pbrFace, pbrBlack);
CPen penGray (PS_SOLID, 1, clrDark);
CPen penDkGray (PS_SOLID, 1, clrBlack);
CPen penHiLight (PS_SOLID, 1, clrHighlight);
CPen* pOldPen = pDC->SelectObject (&penGray);
ASSERT (pOldPen != NULL);
if (iTab != pTabWnd->GetActiveTab () - 1)
{
pDC->MoveTo (rectTab.right, rectTab.top + 3);
pDC->LineTo (rectTab.right, rectTab.bottom - 3);
}
if (bIsActive)
{
if (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
{
CRect rectFace = rectTab;
rectFace.top -= pTabWnd->IsFlatFrame () ? 1 : 2;
pDC->FillRect (rectFace, pbrFace);
pDC->SelectObject (&penDkGray);
pDC->MoveTo (rectTab.right, rectTab.top);
pDC->LineTo (rectTab.right, rectTab.bottom);
pDC->LineTo (rectTab.left, rectTab.bottom);
pDC->SelectObject (&penHiLight);
pDC->LineTo (rectTab.left, rectTab.top);
}
else
{
CPen penLight (PS_SOLID, 1, m_clrMenuLight);
CRect rectFace = rectTab;
rectFace.bottom ++;
rectFace.left ++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -