virtual void OnDraw (CDC* pDC) { ASSERT_VALID (pDC); CBCGPBaseRibbonElement* pElement = (CBCGPBaseRibbonElement*) m_dwData; ASSERT_VALID (pElement); CBCGPToolbarMenuButton dummy; dummy.m_strText = m_strText; CString strValue = pElement->GetText (); if (strValue.GetLength () > nMaxValueLen) { strValue = strValue.Left (nMaxValueLen - 1); } if (!strValue.IsEmpty ()) { dummy.m_strText += _T('\t'); dummy.m_strText += strValue; } dummy.m_bMenuMode = TRUE; dummy.m_pWndParent = GetParentWnd (); if (pElement->IsVisible ()) { dummy.m_nStyle |= TBBS_CHECKED; } dummy.OnDraw (pDC, m_rect, NULL, TRUE, FALSE, m_bIsHighlighted); }
//********************************************************************************************************* void CBCGPVisualManagerVS2008::OnDrawButtonBorder (CDC* pDC, CBCGPToolbarButton* pButton, CRect rect, BCGBUTTON_STATE state) { ASSERT_VALID (pDC); ASSERT_VALID (pButton); CBCGPToolbarMenuButton* pMenuButton = DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton); BOOL bIsMenuBarButton = pMenuButton != NULL && pMenuButton->GetParentWnd () != NULL && pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPMenuBar)); if (bIsMenuBarButton) { rect.bottom -= 2; } if (!bIsMenuBarButton || !pMenuButton->IsDroppedDown ()) { CBCGPVisualManagerVS2005::OnDrawButtonBorder (pDC, pButton, rect, state); return; } pDC->Draw3dRect (rect, m_clrMenuItemBorder, m_clrMenuItemBorder); }
//*********************************************************************************** void CBCGPVisualManagerVS2005::OnFillHighlightedArea (CDC* pDC, CRect rect, CBrush* pBrush, CBCGPToolbarButton* pButton) { if (pButton != NULL && (m_CurrAppTheme == WinXpTheme_Blue || m_CurrAppTheme == WinXpTheme_Olive)) { ASSERT_VALID (pButton); CBCGPToolbarMenuButton* pMenuButton = DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton); BOOL bIsPopupMenu = pMenuButton != NULL && pMenuButton->GetParentWnd () != NULL && pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar)); if (bIsPopupMenu && (pButton->m_nStyle & TBBS_CHECKED) && pBrush == &m_brHighlightDn) { if (CBCGPToolBarImages::m_bIsDrawOnGlass) { CBCGPDrawManager dm (*pDC); dm.DrawRect (rect, m_clrBarBkgnd, (COLORREF)-1); } else { pDC->FillRect (rect, &m_brMenuItemCheckedHighlight); } return; } if (pMenuButton != NULL && !bIsPopupMenu && pMenuButton->IsDroppedDown ()) { if (CBCGPToolBarImages::m_bIsDrawOnGlass) { CBCGPDrawManager dm (*pDC); dm.DrawRect (rect, m_clrBarBkgnd, (COLORREF)-1); } else { pDC->FillRect (rect, &m_brMenuButtonDroppedDown); } return; } } CBCGPVisualManager2003::OnFillHighlightedArea (pDC, rect, pBrush, pButton); }
void CBCGPToolbarMenuButton::CopyFrom (const CBCGPToolbarButton& s) { CBCGPToolbarButton::CopyFrom (s); const CBCGPToolbarMenuButton& src = (const CBCGPToolbarMenuButton&) s; m_bDefault = src.m_bDefault; m_bMenuOnly = src.m_bMenuOnly; m_bIsRadio = src.m_bIsRadio; m_pWndMessage = src.m_pWndMessage; m_bMenuPaletteMode = src.m_bMenuPaletteMode; m_nPaletteRows = src.m_nPaletteRows; m_bQuickCustomMode = src.m_bQuickCustomMode; m_bShowAtRightSide = src.m_bShowAtRightSide; SetTearOff (src.m_uiTearOffBarID); while (!m_listCommands.IsEmpty ()) { delete m_listCommands.RemoveHead (); } for (POSITION pos = src.m_listCommands.GetHeadPosition (); pos != NULL;) { CBCGPToolbarMenuButton* pItem = (CBCGPToolbarMenuButton*) src.m_listCommands.GetNext (pos); ASSERT (pItem != NULL); ASSERT_KINDOF (CBCGPToolbarMenuButton, pItem); CRuntimeClass* pSrcClass = pItem->GetRuntimeClass (); ASSERT (pSrcClass != NULL); CBCGPToolbarMenuButton* pNewItem = (CBCGPToolbarMenuButton*) pSrcClass->CreateObject (); ASSERT (pNewItem != NULL); ASSERT_KINDOF (CBCGPToolbarMenuButton, pNewItem); pNewItem->CopyFrom (*pItem); m_listCommands.AddTail (pNewItem); } }
//***************************************************************************************** CBCGPToolbarMenuButton::CBCGPToolbarMenuButton (const CBCGPToolbarMenuButton& src) { m_nID = src.m_nID; m_nStyle = src.m_nStyle; m_bUserButton = src.m_bUserButton; SetImage (src.GetImage ()); m_strText = src.m_strText; m_bDragFromCollection = FALSE; m_bText = src.m_bText; m_bImage = src.m_bImage; m_bDrawDownArrow = src.m_bDrawDownArrow; m_bMenuMode = src.m_bMenuMode; m_bDefault = src.m_bDefault; m_bMenuOnly = src.m_bMenuOnly; m_bIsRadio = src.m_bIsRadio; SetTearOff (src.m_uiTearOffBarID); HMENU hmenu = src.CreateMenu (); ASSERT (hmenu != NULL); CreateFromMenu (hmenu); ::DestroyMenu (hmenu); m_rect.SetRectEmpty (); m_pPopupMenu = NULL; m_pWndParent = NULL; m_bClickedOnMenu = FALSE; m_bHorz = TRUE; m_bMenuPaletteMode = src.m_bMenuPaletteMode; m_nPaletteRows = src.m_nPaletteRows; m_bQuickCustomMode = src.m_bQuickCustomMode; m_bShowAtRightSide = src.m_bShowAtRightSide; }
//********************************************************************************************************* void CBCGPVisualManagerVS2008::OnFillButtonInterior (CDC* pDC, CBCGPToolbarButton* pButton, CRect rect, CBCGPVisualManager::BCGBUTTON_STATE state) { ASSERT_VALID (pDC); ASSERT_VALID (pButton); CBCGPToolbarMenuButton* pMenuButton = DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton); BOOL bIsMenuBarButton = pMenuButton != NULL && pMenuButton->GetParentWnd () != NULL && pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPMenuBar)); if (bIsMenuBarButton) { rect.bottom -= 2; } if (!bIsMenuBarButton || !pMenuButton->IsDroppedDown ()) { CBCGPVisualManagerVS2005::OnFillButtonInterior (pDC, pButton, rect, state); return; } if (!m_bOSColors) { OnFillHighlightedArea (pDC, rect, &m_brBarBkgnd, pButton); return; } COLORREF clr1 = CBCGPDrawManager::PixelAlpha (m_clrHighlight, 85); COLORREF clr2 = RGB (255, 255, 255); CBCGPDrawManager dm (*pDC); dm.FillGradient (rect, clr1, clr2, TRUE); }
//******************************************************************************************* BOOL CBCGPDlgImpl::ProcessMouseClick (POINT pt) { if (!CBCGPToolBar::IsCustomizeMode () && CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd)) { CBCGPPopupMenu::MENUAREA_TYPE clickArea = CBCGPPopupMenu::GetActiveMenu()->CheckArea (pt); if (clickArea == CBCGPPopupMenu::OUTSIDE) { // Click outside of menu //-------------------------------------------- // Maybe secondary click on the parent button? //-------------------------------------------- CBCGPToolbarMenuButton* pParentButton = CBCGPPopupMenu::GetActiveMenu()->GetParentButton (); if (pParentButton != NULL) { CWnd* pWndParent = pParentButton->GetParentWnd (); if (pWndParent != NULL) { CBCGPPopupMenuBar* pWndParentPopupMenuBar = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, pWndParent); CPoint ptClient = pt; pWndParent->ScreenToClient (&ptClient); if (pParentButton->Rect ().PtInRect (ptClient)) { //------------------------------------------------------- // If user clicks second time on the parent button, // we should close an active menu on the toolbar/menubar // and leave it on the popup menu: //------------------------------------------------------- if (pWndParentPopupMenuBar == NULL && !CBCGPPopupMenu::GetActiveMenu()->InCommand ()) { //---------------------------------------- // Toolbar/menu bar: close an active menu! //---------------------------------------- CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE); } return TRUE; } if (pWndParentPopupMenuBar != NULL) { pWndParentPopupMenuBar->CloseDelayedSubMenu (); CBCGPPopupMenu* pWndParentPopupMenu = DYNAMIC_DOWNCAST (CBCGPPopupMenu, pWndParentPopupMenuBar->GetParent ()); if (pWndParentPopupMenu != NULL) { CBCGPPopupMenu::MENUAREA_TYPE clickAreaParent = pWndParentPopupMenu->CheckArea (pt); switch (clickAreaParent) { case CBCGPPopupMenu::MENU: case CBCGPPopupMenu::TEAROFF_CAPTION: case CBCGPPopupMenu::LOGO: return FALSE; case CBCGPPopupMenu::SHADOW_RIGHT: case CBCGPPopupMenu::SHADOW_BOTTOM: pWndParentPopupMenu->SendMessage (WM_CLOSE); m_Dlg.SetFocus (); return TRUE; } } } } } if (!CBCGPPopupMenu::GetActiveMenu()->InCommand ()) { CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE); CWnd* pWndFocus = CWnd::GetFocus (); if (pWndFocus != NULL && pWndFocus->IsKindOf (RUNTIME_CLASS (CBCGPToolBar))) { m_Dlg.SetFocus (); } if (clickArea != CBCGPPopupMenu::OUTSIDE) // Click on shadow { return TRUE; } } } else if (clickArea == CBCGPPopupMenu::SHADOW_RIGHT || clickArea == CBCGPPopupMenu::SHADOW_BOTTOM) { CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE); m_Dlg.SetFocus (); return TRUE; } } return FALSE; }