// XTPRibbonTheme.cpp: implementation of the CXTPRibbonPaintManager class. // // This file is a part of the XTREME RIBBON MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Common/XTPImageManager.h" #include "Common/XTPHookManager.h" #include "Common/XTPMarkupRender.h" #include "Common/XTPColorManager.h" #include "Common/XTPSystemHelpers.h" #include "Common/XTPDrawHelpers.h" #include "TabManager/XTPTabManager.h" #include "TabManager/XTPTabPaintManager.h" #include "CommandBars/XTPCommandBarsDefines.h" #include "CommandBars/XTPCommandBar.h" #include "CommandBars/XTPToolBar.h" #include "CommandBars/XTPMenuBar.h" #include "CommandBars/XTPPopupBar.h" #include "CommandBars/XTPControls.h" #include "CommandBars/XTPControl.h" #include "CommandBars/XTPControlButton.h" #include "CommandBars/XTPControlPopup.h" #include "CommandBars/XTPPaintManager.h" #include "CommandBars/XTPCommandBarsFrameHook.h" #include "XTPRibbonGroup.h" #include "XTPRibbonPopups.h" #include "XTPRibbonBar.h" #include "XTPRibbonTab.h" #include "XTPRibbonControlTab.h" #include "XTPRibbonPaintManager.h" #include "XTPRibbonSystemTheme.h" #include "XTPRibbonSystemButton.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CXTPRibbonSystemTheme::CXTPRibbonSystemTheme(CXTPPaintManager* pPaintManager) : CXTPRibbonPaintManager(pPaintManager) { m_pMarkupContext = XTPMarkupCreateContext(0); } CXTPRibbonSystemTheme::~CXTPRibbonSystemTheme() { XTPMarkupReleaseContext(m_pMarkupContext); } void CXTPRibbonSystemTheme::RenderMarkup(CDC* pDC, CRect rc, LPCTSTR lpszMarkupText) { CXTPMarkupUIElement* pMarkupUIElement = XTPMarkupParseText(m_pMarkupContext, lpszMarkupText); XTPMarkupRenderElement(pMarkupUIElement, pDC->GetSafeHdc(), rc); XTPMarkupReleaseElement(pMarkupUIElement); } void CXTPRibbonSystemTheme::RefreshMetrics() { CXTPRibbonPaintManager::RefreshMetrics(); m_clrRibbonFace = GetSysColor(COLOR_3DFACE); m_clrMinimizedFrameEdgeShadow = GetSysColor(COLOR_3DSHADOW); m_clrMinimizedFrameEdgeHighLight = GetSysColor(COLOR_3DHIGHLIGHT); m_clrRibbonGroupCaptionText = GetSysColor(COLOR_BTNTEXT); m_pTabPaintManager->GetColorSet()->m_clrHighlightText.SetStandardValue(m_clrRibbonGroupCaptionText); m_pTabPaintManager->GetColorSet()->m_clrNormalText.SetStandardValue(m_clrRibbonGroupCaptionText); m_pTabPaintManager->GetColorSet()->m_clrSelectedText.SetStandardValue(m_clrRibbonGroupCaptionText); m_clrRecentFileListEdgeShadow = GetSysColor(COLOR_3DSHADOW); m_clrRecentFileListEdgeHighLight = GetSysColor(COLOR_3DHIGHLIGHT); m_nGroupSpacing = 2; m_bFlatFrame = FALSE; } void CXTPRibbonSystemTheme::DrawRibbonTab(CDC* pDC, CXTPRibbonTab* pItem) { XTPTabPosition tabPosition = pItem->GetTabManager()->GetPosition(); CRect rcEntry(pItem->GetRect()); CXTPTabPaintManagerAppearanceSet::InflateRectEx(rcEntry, CRect(0, 1, -1, -1), tabPosition); XTPRibbonTabContextColor tabColor = pItem->GetContextColor(); if (tabColor != xtpRibbonTabContextColorNone) { CXTPRibbonPaintManager::DrawRibbonTab(pDC, pItem); return; } CXTPRibbonBar* pRibbonBar = pItem->GetRibbonBar(); BOOL bSelected = pItem->IsSelected(); BOOL bHighlighted = pItem->IsHighlighted(); BOOL bFocused = pItem->IsFocused(); if (bSelected && pRibbonBar->IsRibbonMinimized()) { CXTPRibbonControlTab* pControlTab = (CXTPRibbonControlTab*)pItem->GetTabManager(); if (pControlTab->GetCommandBar() && pControlTab->GetCommandBar()->IsTrackingMode()) { bFocused = bHighlighted = FALSE; } else if (pControlTab->GetSelected() && bFocused) { bFocused = bSelected = FALSE; bHighlighted = TRUE; } else { bFocused = bSelected = FALSE; } } if (bSelected || bHighlighted) { LPCTSTR lpszMarkupText = NULL; if (bSelected && bFocused) { lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T(""); } else if (bSelected && bHighlighted) { lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); } else if (bSelected) { lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T(""); } else if (bHighlighted) { lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T(""); } RenderMarkup(pDC, rcEntry, lpszMarkupText); } } void CXTPRibbonSystemTheme::FillRibbonBar(CDC* pDC, CXTPRibbonBar* pRibbonBar) { CXTPClientRect rcRibbonClient(pRibbonBar); if (pRibbonBar->IsFrameThemeEnabled()) rcRibbonClient.top += m_nRibbonCaptionHeight; CRect rcRibbonTabs(rcRibbonClient.left, rcRibbonClient.top, rcRibbonClient.right, rcRibbonClient.top + m_nTabsHeight); CRect rcRibbonGroups(rcRibbonClient.left, rcRibbonTabs.bottom, rcRibbonClient.right, rcRibbonClient.bottom); pDC->FillSolidRect(rcRibbonTabs, m_clrRibbonFace); pDC->FillSolidRect(rcRibbonGroups, m_clrRibbonFace); if (pRibbonBar->IsQuickAccessBelowRibbon()) { CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect(); pDC->Draw3dRect(rcQuickAccess, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DSHADOW)); } if (!pRibbonBar->IsGroupsVisible() && !pRibbonBar->IsQuickAccessBelowRibbon()) { m_pPaintManger->HorizontalLine(pDC, rcRibbonClient.left, rcRibbonClient.bottom - 2, rcRibbonClient.right, m_clrMinimizedFrameEdgeShadow); m_pPaintManger->HorizontalLine(pDC, rcRibbonClient.left, rcRibbonClient.bottom - 1, rcRibbonClient.right, m_clrMinimizedFrameEdgeHighLight); } } void CXTPRibbonSystemTheme::FillGroupRect(CDC* pDC, CXTPRibbonTab* /*pActiveTab*/, CRect rcGroups) { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T(" ") _T(" ") _T(" ") _T("") _T(" ") _T("") _T(" ") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, rcGroups, lpszMarkupText); } void CXTPRibbonSystemTheme::FillGroupPopupToolBar(CDC* pDC, CXTPRibbonGroup* /*pGroup*/, CXTPCommandBar* pCommandBar) { pDC->SetBkMode(TRANSPARENT); CXTPClientRect rcRibbon(pCommandBar); pDC->FillSolidRect(rcRibbon, m_clrRibbonFace); } void CXTPRibbonSystemTheme::DrawGroup(CDC* pDC, CXTPRibbonGroup* pGroup) { CRect rcGroup(pGroup->GetRect()); CRect rcGroupClient(rcGroup.left, rcGroup.top, rcGroup.right, rcGroup.bottom - m_nGroupCaptionHeight); CRect rcGroupCaption(rcGroup.left, rcGroupClient.bottom, rcGroup.right, rcGroup.bottom); if (!pGroup->IsReduced()) { if (pGroup->IsHighlighted()) { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rcGroup, lpszMarkupText); lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, rcGroupCaption, lpszMarkupText); lpszMarkupText = _T("") _T("") _T(""); RenderMarkup(pDC, rcGroup, lpszMarkupText); } else { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rcGroup, lpszMarkupText); lpszMarkupText = _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, rcGroupCaption, lpszMarkupText); } CString strCaption = pGroup->GetCaption(); XTPDrawHelpers()->StripMnemonics(strCaption); CXTPFontDC font(pDC, &m_fontGroupCaption); CRect rcGroupCaptionText(rcGroupCaption); rcGroupCaptionText.OffsetRect(0, -1); if (pGroup->IsOptionButtonVisible()) rcGroupCaptionText.right -= m_nGroupCaptionHeight + 1; rcGroupCaptionText.DeflateRect(2, 2); pDC->SetTextColor(m_clrRibbonGroupCaptionText); pDC->DrawText(strCaption, rcGroupCaptionText, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS | DT_CENTER); } } void CXTPRibbonSystemTheme::DrawRibbonFrameCaption(CDC* pDC, CXTPRibbonBar* pRibbonBar, BOOL bActive) { if (pRibbonBar->IsDwmEnabled()) { CXTPRibbonPaintManager::DrawRibbonFrameCaption(pDC, pRibbonBar, bActive); return; } CFrameWnd* pSite = (CFrameWnd*)pRibbonBar->GetSite(); CRect rcCaption = pRibbonBar->GetCaptionRect(); if (!pRibbonBar->IsDwmEnabled()) { LPCTSTR lpszMarkupText = bActive ? _T("") _T("") _T(" ") _T(" ") _T(" ") _T("") : _T("") _T("") _T(" ") _T(" ") _T(" ") _T(""); RenderMarkup(pDC, rcCaption, lpszMarkupText); } else { pDC->FillSolidRect(rcCaption, 0); } ////////////////////////////////////////////////////////////////////////// if (!pRibbonBar->IsQuickAccessBelowRibbon() && pRibbonBar->IsQuickAccessVisible() && ((CXTPControls*)pRibbonBar->GetQuickAccessControls())->GetVisibleCount() > 0) { CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect(); CRect rcQuickAccessArea(rcQuickAccess.left - 15, rcQuickAccess.top + 2, rcQuickAccess.right, rcQuickAccess.top + 2 + pRibbonBar->GetQuickAccessHeight()); CString strMarkupText; rcQuickAccessArea.DeflateRect(1, 2, 3, 2); CSize sz = rcQuickAccessArea.Size(); strMarkupText.Format( _T("") , sz.cy /2, 0, sz.cy / 2, sz.cy, sz.cx - sz.cy / 2, sz.cy, sz.cx, sz.cy, sz.cx, sz.cy / 2, sz.cx, 0, sz.cx - sz.cy /2, 0); RenderMarkup(pDC, rcQuickAccessArea, strMarkupText); } ////////////////////////////////////////////////////////////////////////// if (pRibbonBar->GetSystemButton() == NULL) { HICON hIcon = m_pPaintManger->GetFramePaintManager()->GetFrameSmallIcon(pSite); if (hIcon) { CSize szIcon(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); int nTop = (rcCaption.Height() - szIcon.cy)/2; int nLeft = rcCaption.left + 10; DrawIconEx(pDC->GetSafeHdc(), nLeft, nTop, hIcon, szIcon.cx, szIcon.cy, 0, NULL, DI_NORMAL); } } CRect rcCaptionText = pRibbonBar->GetCaptionTextRect(); CXTPRibbonTabContextHeaders* pContextHeaders = pRibbonBar->GetContextHeaders(); if (pContextHeaders->GetCount() != 0) { DrawRibbonFrameContextHeaders(pDC, pRibbonBar, pContextHeaders); } CXTPFontDC font(pDC, &m_pPaintManger->GetFramePaintManager()->m_fontFrameCaption); CString strWindowText; pSite->GetWindowText(strWindowText); rcCaptionText.left += max(0, (rcCaptionText.Width() - pDC->GetTextExtent(strWindowText).cx) / 2); if (pSite->GetStyle() & WS_MAXIMIZE) { rcCaptionText.top += pRibbonBar->GetFrameHook()->GetFrameBorder() / 2; } if (!pRibbonBar->IsDwmEnabled()) { m_pPaintManger->GetFramePaintManager()->DrawCaptionText(pDC, rcCaptionText, pSite, bActive); } else { DrawDwmCaptionText(pDC, rcCaptionText, strWindowText, pSite, bActive); } } void CXTPRibbonSystemTheme::DrawRibbonFrameCaptionBar(CDC* pDC, CXTPRibbonBar* pRibbonBar) { CRect rcCaption = pRibbonBar->GetCaptionRect(); rcCaption.top--; LPCTSTR lpszMarkupText = _T("") _T("") _T(" ") _T(" ") _T(" ") _T(""); RenderMarkup(pDC, rcCaption, lpszMarkupText); if (!pRibbonBar->IsQuickAccessBelowRibbon() && pRibbonBar->IsQuickAccessVisible() && ((CXTPControls*)pRibbonBar->GetQuickAccessControls())->GetVisibleCount() > 0) { CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect(); int nFrameBorder = 0; CRect rcQuickAccessArea(rcQuickAccess.left - 15, nFrameBorder, rcQuickAccess.right, pRibbonBar->GetQuickAccessHeight() + nFrameBorder); CString strMarkupText; rcQuickAccessArea.DeflateRect(1, 2, 3, 2); CSize sz = rcQuickAccessArea.Size(); strMarkupText.Format( _T("") , sz.cy /2, 0, sz.cy / 2, sz.cy, sz.cx - sz.cy / 2, sz.cy, sz.cx, sz.cy, sz.cx, sz.cy / 2, sz.cx, 0, sz.cx - sz.cy /2, 0); RenderMarkup(pDC, rcQuickAccessArea, strMarkupText); } CXTPRibbonTabContextHeaders* pContextHeaders = pRibbonBar->GetContextHeaders(); if (pContextHeaders->GetCount() != 0) { DrawRibbonFrameContextHeaders(pDC, pRibbonBar, pContextHeaders); } } CSize CXTPRibbonSystemTheme::DrawControlGroupOption(CDC* pDC, CXTPControl* pControlGroupOption, BOOL bDraw) { if (bDraw) { CRect rc = pControlGroupOption->GetRect(); m_pPaintManger->DrawRectangle(pDC, rc, pControlGroupOption->GetSelected(), pControlGroupOption->GetPressed(), TRUE, FALSE, FALSE, xtpBarTypeNormal, xtpBarTop); rc = CRect(CPoint((rc.left + rc.right - 6) / 2, (rc.bottom + rc.top - 8) / 2), CSize(6, 8)); CXTPPenDC pen(*pDC, 0); CXTPBrushDC brush(*pDC, 0); pDC->MoveTo(rc.left, rc.top + 5); pDC->LineTo(rc.left, rc.top); pDC->LineTo(rc.left + 6, rc.top); pDC->MoveTo(rc.left + 3, rc.top + 3); pDC->LineTo(rc.left + 7, rc.top + 7); XTPDrawHelpers()->Triangle(pDC, CPoint(rc.left + 3, rc.top + 6), CPoint(rc.left + 6, rc.top + 3), CPoint(rc.left + 6, rc.top + 6)); pen.Color(0xFFFFFF); pDC->MoveTo(rc.left + 1, rc.top + 5); pDC->LineTo(rc.left + 1, rc.top + 1); pDC->LineTo(rc.left + 6, rc.top + 1); pDC->MoveTo(rc.left + 4, rc.top + 7); pDC->LineTo(rc.left + 7, rc.top + 7); pDC->LineTo(rc.left + 7, rc.top + 2); pDC->SetPixel(rc.left + 4, rc.top + 3, 0xFFFFFF); } return CSize(15, 14); } CSize CXTPRibbonSystemTheme::DrawControlGroupPopup(CDC* pDC, CXTPControlPopup* pControlGroupPopup, BOOL bDraw) { CXTPRibbonGroup* pRibbonGroup = pControlGroupPopup->GetRibbonGroup(); if (!pRibbonGroup) { if (bDraw) { m_pPaintManger->DrawControlEntry(pDC, pControlGroupPopup); } return m_pPaintManger->DrawControlToolBarParent(pDC, pControlGroupPopup, bDraw); } if (bDraw) { CRect rc = pControlGroupPopup->GetRect(); if (pControlGroupPopup->GetPopuped()) { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); } else if (pControlGroupPopup->GetSelected()) { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); } else { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); } } CSize szButton(max(42, m_pPaintManger->m_nTextHeight * 2 - 3), GetEditHeight() * 3); CXTPFontDC font(pDC, m_pPaintManger->GetControlFont(pControlGroupPopup)); int nSplitDropDownHeight = m_pPaintManger->GetSplitDropDownHeight(); if (bDraw) { CXTPImageManagerIcon* pImageIcon = pControlGroupPopup->GetImage(0); BOOL bDrawImage = (pImageIcon != NULL); CRect rcButton = pControlGroupPopup->GetRect(); if (bDrawImage) { CSize sz(pImageIcon->GetWidth(), pImageIcon->GetHeight()); CPoint pt = CPoint(rcButton.CenterPoint().x - sz.cx / 2, rcButton.top + 4); if (sz.cx < 20) { pt.y = rcButton.top + 9; } m_pPaintManger->DrawImage(pDC, pt, sz, pImageIcon, pControlGroupPopup->GetSelected(), pControlGroupPopup->GetPressed(), pControlGroupPopup->GetEnabled(), FALSE, pControlGroupPopup->GetPopuped()); } CRect rcText = rcButton; rcText.bottom -= m_nGroupCaptionHeight + 2; rcText.top = rcText.bottom - nSplitDropDownHeight; pDC->SetTextColor(m_pPaintManger->GetControlTextColor(pControlGroupPopup)); m_pPaintManger->DrawControlText2(pDC, pControlGroupPopup, rcText, TRUE, FALSE, TRUE); } else { CSize szText = m_pPaintManger->DrawControlText2(pDC, pControlGroupPopup, CXTPEmptyRect(), FALSE, FALSE, TRUE); szButton.cx = max(szButton.cx, szText.cx + 5); } return szButton; } void CXTPRibbonSystemTheme::DrawRibbonQuickAccessButton(CDC* pDC, CXTPControlPopup* pControl) { m_pPaintManger->DrawRectangle(pDC, pControl->GetRect(), pControl->GetSelected(), pControl->GetPressed(), pControl->GetEnabled(), FALSE, pControl->GetPopuped(), xtpBarTypeNormal, xtpBarTop); { COLORREF clr = GetSysColor(COLOR_3DHIGHLIGHT); CXTPPenDC pen(*pDC, clr); CXTPBrushDC brush(*pDC, clr); CPoint pt = pControl->GetRect().CenterPoint(); pt.y++; pDC->MoveTo(pt.x - 2, pt.y - 3); pDC->LineTo(pt.x + 3, pt.y - 3); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 2, pt.y), CPoint(pt.x + 2, pt.y), CPoint(pt.x, pt.y + 2)); } { COLORREF clr = GetSysColor(COLOR_BTNTEXT); CXTPPenDC pen(*pDC, clr); CXTPBrushDC brush(*pDC, clr); CPoint pt = pControl->GetRect().CenterPoint(); pDC->MoveTo(pt.x - 2, pt.y - 3); pDC->LineTo(pt.x + 3, pt.y - 3); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 2, pt.y), CPoint(pt.x + 2, pt.y), CPoint(pt.x, pt.y + 2)); } } void CXTPRibbonSystemTheme::DrawRibbonQuickAccessMoreButton(CDC* pDC, CXTPControlPopup* pControl) { m_pPaintManger->DrawRectangle(pDC, pControl->GetRect(), pControl->GetSelected(), pControl->GetPressed(), pControl->GetEnabled(), FALSE, pControl->GetPopuped(), xtpBarTypeNormal, xtpBarTop); { COLORREF clr = GetSysColor(COLOR_3DHIGHLIGHT); CXTPPenDC pen(*pDC, clr); CXTPBrushDC brush(*pDC, clr); CPoint pt = pControl->GetRect().CenterPoint(); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 3, pt.y - 2), CPoint(pt.x - 1, pt.y), CPoint(pt.x - 3, pt.y + 2)); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x + 1, pt.y - 2), CPoint(pt.x + 3, pt.y), CPoint(pt.x + 1, pt.y + 2)); } { COLORREF clr = GetSysColor(COLOR_BTNTEXT); CXTPPenDC pen(*pDC, clr); CXTPBrushDC brush(*pDC, clr); CPoint pt = pControl->GetRect().CenterPoint(); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 3, pt.y - 1), CPoint(pt.x - 2, pt.y), CPoint(pt.x - 3, pt.y + 1)); XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x + 1, pt.y - 1), CPoint(pt.x + 2, pt.y), CPoint(pt.x + 1, pt.y + 1)); } } void CXTPRibbonSystemTheme::FillMorePopupToolBarEntry(CDC* pDC, CXTPCommandBar* pBar) { CRect rc; pBar->GetClientRect(&rc); pDC->FillSolidRect(rc, m_clrRibbonFace); pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DSHADOW)); } void CXTPRibbonSystemTheme::FillSystemPopupBarEntry(CDC* pDC, CXTPPopupBar* pBar) { CXTPClientRect rc(pBar); LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); CXTPRibbonControlSystemButton* pControlPopup = DYNAMIC_DOWNCAST(CXTPRibbonControlSystemButton, pBar->GetControlPopup()); if (!pControlPopup) return; CXTPRibbonBar* pRibbonBar = DYNAMIC_DOWNCAST(CXTPRibbonBar, pControlPopup->GetParent()); if (!pRibbonBar) return; CRect rcPopup = pControlPopup->GetRect(); pControlPopup->GetParent()->ClientToScreen(rcPopup); pBar->ScreenToClient(rcPopup); if (pRibbonBar->IsCaptionVisible() && CRect().IntersectRect(rcPopup, rc)) { DrawRibbonFrameSystemButton(pDC, pControlPopup, rcPopup); } for (int i = 0; i < pBar->GetControlCount(); i++) { CXTPControl* pControl = pBar->GetControl(i); if (pControl && pControl->GetWrap()) { CRect rcRow = pControl->GetRowRect(); pDC->FillSolidRect(rcRow, GetXtremeColor(XPCOLOR_TOOLBAR_FACE)); break; } } } void CXTPRibbonSystemTheme::DrawSystemPopupBarButton(CDC* pDC, CXTPControl* pButton) { LPCTSTR lpszMarkupText = pButton->GetSelected() ? _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") : _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T(""); RenderMarkup(pDC, pButton->GetRect(), lpszMarkupText); m_pPaintManger->DrawControlToolBarParent(pDC, pButton, TRUE); } void CXTPRibbonSystemTheme::DrawRibbonFrameSystemButton(CDC* pDC, CXTPRibbonControlSystemButton* pControl, CRect rc) { CXTPRibbonBar* pRibbonBar = (CXTPRibbonBar*)pControl->GetParent(); if (!pRibbonBar->IsCaptionVisible() || !pRibbonBar->IsTabsVisible()) { m_pPaintManger->DrawControlToolBarParent(pDC, pControl, TRUE); return; } XTPImageState nState = xtpImageNormal; if (pControl->GetPopuped()) nState = xtpImagePressed; else if (pControl->GetSelected()) nState = xtpImageHot; CXTPImageManagerIcon* pIcon = pControl->GetImage(32); if (pIcon && pIcon->GetWidth() > 32) { CPoint ptIcon((rc.left + rc.right - pIcon->GetWidth()) / 2, (rc.top + rc.bottom - pIcon->GetHeight()) / 2); pIcon->m_bDrawComposited = pControl->HasDwmCompositedRect(); pIcon->Draw(pDC, ptIcon, pIcon->GetIcon(nState)); pIcon->m_bDrawComposited = FALSE; return; } int nOffset = 0; if (rc.top < 0) { nOffset = rc.top; rc.OffsetRect(0, -nOffset); } { CSize szDest(46, 45); CPoint ptDest((rc.left + rc.right - szDest.cx) / 2, nOffset + (rc.top + rc.bottom - szDest.cy) / 2); LPCTSTR lpszMarkupText = NULL; if (pControl->GetPopuped()) { lpszMarkupText = _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(""); } else if (pControl->GetSelected()) { lpszMarkupText = _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(""); } else { lpszMarkupText = _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T(" ") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(" ") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T("") _T(""); } RenderMarkup(pDC, CRect(ptDest, szDest), lpszMarkupText); } if (pIcon) { CPoint ptIcon((rc.left + rc.right - pIcon->GetWidth()) / 2, nOffset + (rc.top + rc.bottom + 1 - pIcon->GetHeight()) / 2); pIcon->m_bDrawComposited = pControl->HasDwmCompositedRect(); pIcon->Draw(pDC, ptIcon, pIcon->GetIcon(nState)); pIcon->m_bDrawComposited = FALSE; } else { CWnd* pSite = pControl->GetParent()->GetSite(); HICON hIcon = m_pPaintManger->GetFramePaintManager()->GetFrameLargeIcon(pSite); if (hIcon) { CPoint ptIcon((rc.left + rc.right - 33) / 2, nOffset + (rc.top + rc.bottom - 31) / 2); DrawIconEx(pDC->GetSafeHdc(), ptIcon.x, ptIcon.y, hIcon, 32, 32, NULL, NULL, DI_NORMAL); } } } void CXTPRibbonSystemTheme::DrawRibbonScrollButton(CDC* pDC, CXTPControl* pControl, BOOL bScrollLeft) { CRect rc(pControl->GetRect()); if (bScrollLeft) { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); } else { LPCTSTR lpszMarkupText = _T("") _T("") _T("") _T(""); RenderMarkup(pDC, rc, lpszMarkupText); } CPoint pt = rc.CenterPoint(); if (bScrollLeft) { XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 1, pt.y), CPoint(pt.x + 1, pt.y - 2), CPoint(pt.x + 1, pt.y + 2), GetSysColor(COLOR_BTNTEXT)); } else { XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 1, pt.y - 2), CPoint(pt.x + 1, pt.y), CPoint(pt.x - 1, pt.y + 2), GetSysColor(COLOR_BTNTEXT)); } } BOOL CXTPRibbonSystemTheme::DrawRibbonGroupControlEntry(CDC* pDC, CXTPControl* pButton) { if (pButton->GetRibbonGroup() && pButton->GetRibbonGroup()->IsControlsGrouping()) { if (!pButton->GetSelected()) { BOOL bLeft = pButton->GetBeginGroup() || pButton->GetWrap(); int nIndexNext = pButton->GetControls()->GetNext(pButton->GetIndex()); BOOL bRight = nIndexNext <= pButton->GetIndex() || pButton->GetControls()->GetAt(nIndexNext)->GetBeginGroup() || pButton->GetControls()->GetAt(nIndexNext)->GetWrap(); LPCTSTR lpszMarkupText = NULL; if (bLeft && bRight) lpszMarkupText = _T("") _T("") _T(" ") _T(" ") _T(""); else if (bLeft) lpszMarkupText = _T("") _T("") _T(" ") _T(" ") _T(" "); else if (bRight) lpszMarkupText = _T("") _T("") _T(" ") _T(" ") _T(""); else lpszMarkupText = _T("") _T("") _T(" ") _T(" ") _T(""); RenderMarkup(pDC, pButton->GetRect(), lpszMarkupText); return FALSE; } return FALSE; } return FALSE; }