www.pudn.com > ÍøÂç¶Ë¿Ú¼àÊÓ.rar > BCGPCustomizeMenuButton.cpp
// BCGPCustomizeMenuButton.cpp: implementation of the CBCGPCustomizeMenuButton class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "bcgprores.h" #include "bcgcbpro.h" #include "BCGPCustomizeMenuButton.h" #include "CustomizeButton.h" #include "BCGPFrameWnd.h" #include "BCGPMDIFrameWnd.h" #include "BCGPKeyboardManager.h" #include "resource.h" #include "BCGPLocalResource.h" #include "afxtempl.h" #include "BCGPVisualManagerXP.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif IMPLEMENT_DYNCREATE(CBCGPCustomizeMenuButton, CBCGPToolbarMenuButton) CMapCBCGPCustomizeMenuButton::m_mapPresentIDs; CBCGPToolBar* CBCGPCustomizeMenuButton::m_pWndToolBar = NULL; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// BOOL CBCGPCustomizeMenuButton::m_bRecentlyUsedOld = FALSE; CBCGPCustomizeMenuButton::CBCGPCustomizeMenuButton() { } //**************************************************************************************** CBCGPCustomizeMenuButton::~CBCGPCustomizeMenuButton() { } //**************************************************************************************** CBCGPCustomizeMenuButton::CBCGPCustomizeMenuButton(UINT uiID,HMENU hMenu,int iImage,LPCTSTR lpszText,BOOL bUserButton): CBCGPToolbarMenuButton (uiID, hMenu/* HMENU */, iImage /*iImage*/, lpszText, bUserButton) { m_uiIndex = (UINT)-1; bSeparator = FALSE; m_bAddSpr = FALSE; m_bIsEnabled = TRUE; m_bBrothersBtn = FALSE; } //**************************************************************************************** void CBCGPCustomizeMenuButton::SetItemIndex(UINT uiIndex, BOOL bExist, BOOL bAddSpr) { m_uiIndex = uiIndex; m_bExist = bExist; m_bAddSpr = bAddSpr; if((uiIndex != ID_BCGBARRES_TOOLBAR_RESET_PROMT) && !bSeparator && bExist) { CBCGPToolbarButton* pBtn = m_pWndToolBar->GetButton(uiIndex); m_bShow = pBtn->IsVisible(); }else { m_bShow = FALSE; } } //**************************************************************************************** void CBCGPCustomizeMenuButton::CopyFrom (const CBCGPToolbarButton& s) { CBCGPToolbarButton::CopyFrom (s); const CBCGPCustomizeMenuButton& src = (const CBCGPCustomizeMenuButton&) s; m_uiIndex = src.m_uiIndex; m_bShow = src.m_bShow; m_pWndToolBar = src.m_pWndToolBar; bSeparator = src.bSeparator; m_bExist = src.m_bExist; m_bAddSpr = src.m_bAddSpr; m_bIsEnabled = src.m_bIsEnabled; m_bBrothersBtn = src.m_bBrothersBtn; } //**************************************************************************************** SIZE CBCGPCustomizeMenuButton::OnCalculateSize (CDC* pDC, const CSize& sizeDefault, BOOL bHorz) { if (bSeparator) { return CSize(0, 4); } if (m_bBrothersBtn) { return CBCGPToolbarMenuButton::OnCalculateSize(pDC, sizeDefault, bHorz); } //----------------------------- // Try to Find Buttons Text //----------------------------- if (m_strText.IsEmpty ()) { //------------------------------------------- // Try to find the command name in resources: //------------------------------------------- CString strMessage; int iOffset; if (strMessage.LoadString (m_nID) && (iOffset = strMessage.Find (_T('\n'))) != -1) { m_strText = strMessage.Mid (iOffset + 1); } } else { // m_strText.Remove (_T('&')); //---------------------------------------- // Remove trailing label (ex.:"\tCtrl+S"): //---------------------------------------- int iOffset = m_strText.Find (_T('\t')); if (iOffset != -1) { m_strText = m_strText.Left (iOffset); } } //-------------------- // Change accelerator: //-------------------- if (g_pKeyboardManager != NULL && m_bMenuMode && (m_nID < 0xF000 || m_nID >= 0xF1F0)) // Not system. { //----------------------------------- // Remove standard aceleration label: //----------------------------------- int iTabOffset = m_strText.Find (_T('\t')); if (iTabOffset >= 0) { m_strText = m_strText.Left (iTabOffset); } //--------------------------------- // Add an actual accelartion label: //--------------------------------- CString strAccel; CFrameWnd* pParent = m_pWndParent == NULL ? DYNAMIC_DOWNCAST (CFrameWnd, AfxGetMainWnd ()) : BCGCBProGetTopLevelFrame (m_pWndParent); if (pParent != NULL && (CBCGPKeyboardManager::FindDefaultAccelerator ( m_nID, strAccel, pParent, TRUE) || CBCGPKeyboardManager::FindDefaultAccelerator ( m_nID, strAccel, pParent->GetActiveFrame (), FALSE))) { m_strText += _T('\t'); m_strText += strAccel; } } int nTolalWidth = m_strText.GetLength(); TEXTMETRIC tm; pDC->GetTextMetrics (&tm); nTolalWidth *= tm.tmAveCharWidth; CSize sizeImage = CBCGPToolBar::GetMenuButtonSize(); nTolalWidth += 2*sizeImage.cx; nTolalWidth += 3*CBCGPVisualManager::GetInstance ()->GetMenuImageMargin () + 50; int nTotalHeight = sizeImage.cy; if (!m_bMenuMode) { nTotalHeight += CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (); } return CSize(nTolalWidth, nTotalHeight); } //**************************************************************************************** BOOL CBCGPCustomizeMenuButton::OnClickMenuItem() { if (bSeparator || !m_bIsEnabled) { return TRUE; } CBCGPPopupMenuBar* pMenuBar = (CBCGPPopupMenuBar*)m_pWndParent; int nIndex = pMenuBar->ButtonToIndex(this); if (nIndex !=-1) { if (pMenuBar->m_iHighlighted != nIndex) { pMenuBar->m_iHighlighted = nIndex; pMenuBar->InvalidateRect (this->Rect ()); } } if (m_bBrothersBtn) { if (m_pWndToolBar->IsOneRowWithBrother ()) { m_pWndToolBar->SetTwoRowsWithBrother (); } else { m_pWndToolBar->SetOneRowWithBrother (); } return FALSE; } if (m_uiIndex == ID_BCGBARRES_TOOLBAR_RESET_PROMT) // reset pressed { //load default toolbar m_pWndToolBar->PostMessage (BCGM_RESETRPROMPT); return FALSE; } if (!m_bExist) { const CObList& lstOrignButtons = m_pWndToolBar->GetOrigResetButtons (); POSITION pos = lstOrignButtons.FindIndex (m_uiIndex); CBCGPToolbarButton* pButton = (CBCGPToolbarButton*)lstOrignButtons.GetAt (pos); if (pButton == NULL) { return TRUE; } UINT nIndex = m_pWndToolBar->InsertButton(*pButton, m_uiIndex); if (nIndex == -1) { nIndex = m_pWndToolBar->InsertButton(*pButton); } else { CBCGPPopupMenuBar* pMenuBar = (CBCGPPopupMenuBar*)m_pWndParent; int nCount = pMenuBar->GetCount (); for (int i=0; i< nCount; i++) { CBCGPCustomizeMenuButton* pBtn = (CBCGPCustomizeMenuButton*)pMenuBar->GetButton(i); if ((pBtn->m_uiIndex >= nIndex) && (pBtn->m_uiIndex != ID_BCGBARRES_TOOLBAR_RESET_PROMT)) { if (pBtn->m_bExist) { pBtn->m_uiIndex += 1; } } } } m_uiIndex = nIndex; if (m_bAddSpr) { if (nIndex < (UINT)m_pWndToolBar->GetCount ()) { CBCGPToolbarButton* pBtn = m_pWndToolBar->GetButton (nIndex+1); if (!(pBtn->m_nStyle & TBBS_SEPARATOR)) { m_pWndToolBar->InsertSeparator (); } } else { m_pWndToolBar->InsertSeparator (); } } m_pWndToolBar->AdjustLayout (); m_pWndToolBar->AdjustSizeImmediate (); UpdateCustomizeButton (); m_bExist = TRUE; m_bShow = TRUE; CBCGPPopupMenuBar* pMenuBar = (CBCGPPopupMenuBar*)m_pWndParent; pMenuBar->Invalidate (); return TRUE; } CBCGPToolbarButton* pBtn = m_pWndToolBar->GetButton (m_uiIndex); BOOL bVisible = pBtn->IsVisible (); pBtn->SetVisible (!bVisible); m_bShow = !bVisible; //------------------------------------- // Make next Separator the same state //------------------------------------- int nNext = m_uiIndex + 1; if (nNext < m_pWndToolBar->GetCount ()) { CBCGPToolbarButton* pBtnNext = m_pWndToolBar->GetButton (nNext); if (pBtnNext->m_nStyle & TBBS_SEPARATOR) { pBtnNext->SetVisible (!bVisible); } } m_pWndToolBar->AdjustLayout(); m_pWndToolBar->AdjustSizeImmediate (); UpdateCustomizeButton(); pMenuBar->Invalidate(); CCustomizeButton* pCustBtn = m_pWndToolBar->GetCustomizeButton(); CBCGPPopupMenu* pMenu = pCustBtn->GetPopupMenu(); if (pMenu != NULL) { pMenu->RedrawWindow (); } return TRUE; } //**************************************************************************************** void CBCGPCustomizeMenuButton::OnDraw (CDC* pDC, const CRect& rect, CBCGPToolBarImages* pImages, BOOL bHorz, BOOL bCustomizeMode, BOOL bHighlight, BOOL bDrawBorder, BOOL bGrayDisabledButtons) { ASSERT_VALID (pDC); //----------------------------- // Draw Separator //----------------------------- if(bSeparator) { CRect rcSeparator(rect); rcSeparator.left = 2*CBCGPToolBar::GetMenuImageSize ().cx + CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (); CBCGPPopupMenuBar* pMenuBar = (CBCGPPopupMenuBar*)m_pWndParent; CBCGPVisualManager::GetInstance ()->OnDrawSeparator (pDC, pMenuBar, rcSeparator, FALSE); return; } if (m_bBrothersBtn) { CBCGPToolbarMenuButton::OnDraw (pDC, rect, NULL, bHorz, bCustomizeMode, bHighlight, bDrawBorder, bGrayDisabledButtons); return; } CRect rectDefault(rect); CRect rectCheck = rectDefault; rectCheck.bottom -= 2; rectCheck.left += 2; rectCheck.right = rectCheck.left + rectCheck.Height(); CRect rectFrameBtn = rectCheck; if (m_bIsEnabled) { if (m_bShow && bHighlight) { SetStyle (TBBS_BUTTON|TBBS_CHECKED); } else { SetStyle (TBBS_BUTTON); } } else { SetStyle (TBBS_DISABLED); bGrayDisabledButtons = TRUE; bHighlight = FALSE; } //------------------------------- // Highlight All Button if needed //------------------------------- if (bHighlight && m_bIsEnabled) { CRect rcHighlight = rectDefault; rcHighlight.bottom -= 2; rcHighlight.left += 2; COLORREF clrText; if (GetRValue (globalData.clrBtnText) > 128 && GetGValue (globalData.clrBtnText) > 128 && GetBValue (globalData.clrBtnText) > 128) { clrText = RGB (0, 0, 0); } else { clrText = RGB (255, 255, 255); } CRuntimeClass* pRTC = CBCGPVisualManager::GetInstance ()->GetRuntimeClass(); if(!pRTC->IsDerivedFrom(RUNTIME_CLASS(CBCGPVisualManagerXP)) && (m_nStyle & TBBS_CHECKED)) { rcHighlight.left += CBCGPToolBar::GetMenuImageSize ().cx + 3*CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (); } CBCGPVisualManager::GetInstance ()->OnHighlightMenuItem (pDC, this, rcHighlight, clrText); } //--------------------------------- // Draw CheckBox for Visible Items //-------------------------------- DrawCheckBox (pDC, rectCheck, bHighlight); if (bHighlight && !(m_nStyle & TBBS_DISABLED)) { SetStyle (TBBS_BUTTON); } CRect rectStdMenu(rect); rectStdMenu.left += rectCheck.right; rectStdMenu.bottom -= 2; DrawMenuItem (pDC, rectStdMenu, pImages, bCustomizeMode, bHighlight, bGrayDisabledButtons); } //**************************************************************************************** void CBCGPCustomizeMenuButton::DrawMenuItem(CDC* pDC, const CRect& rect, CBCGPToolBarImages* pImages, BOOL bCustomizeMode, BOOL bHighlight, BOOL bGrayDisabledButtons) { ASSERT_VALID (pDC); ASSERT_VALID (this); BOOL bDisableImage = CMD_MGR.IsMenuItemWithoutImage (m_nID); CBCGPUserTool* pUserTool = NULL; if (g_pUserToolsManager != NULL && !m_bUserButton) { pUserTool = g_pUserToolsManager->FindTool (m_nID); } CSize sizeImage = CMenuImages::Size (); BOOL bDisabled = (bCustomizeMode && !IsEditable ()) || (!bCustomizeMode && (m_nStyle & TBBS_DISABLED)); if (m_pPopupMenu != NULL && !m_bToBeClosed) { bHighlight = TRUE; } CFont* pOldFont = NULL; CBCGPPopupMenuBar* pParentMenu = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, m_pWndParent); if (m_nID != 0 && m_nID != (UINT) -1 && !m_bMenuOnly && pParentMenu != NULL && pParentMenu->GetDefaultMenuId () == m_nID) { pOldFont = (CFont*) pDC->SelectObject (&globalData.fontBold); } CRect rectImage; rectImage = rect; rectImage.left += CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (); rectImage.right = rectImage.left + CBCGPToolBar::GetMenuImageSize ().cx + CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (); CRect rectFrameBtn = rectImage; rectFrameBtn.InflateRect (1, -1); BOOL bIsRarelyUsed = (CBCGPMenuBar::IsRecentlyUsedMenus () && CBCGPToolBar::IsCommandRarelyUsed (m_nID)); if (bIsRarelyUsed) { bIsRarelyUsed = FALSE; CBCGPPopupMenuBar* pParentMenuBar = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, m_pWndParent); if (pParentMenuBar != NULL) { CBCGPPopupMenu* pParentMenu = DYNAMIC_DOWNCAST (CBCGPPopupMenu, pParentMenuBar->GetParent ()); if (pParentMenu != NULL && pParentMenu->HideRarelyUsedCommands ()) { bIsRarelyUsed = TRUE; } } } BOOL bLightImage = FALSE; BOOL bFadeImage = !bHighlight && CBCGPVisualManager::GetInstance ()->IsFadeInactiveImage (); if (bIsRarelyUsed) { bLightImage = TRUE; if (bHighlight && (m_nStyle & (TBBS_CHECKED | TBBS_INDETERMINATE))) { bLightImage = FALSE; } if (GetImage () < 0 && !(m_nStyle & (TBBS_CHECKED | TBBS_INDETERMINATE))) { bLightImage = FALSE; } } else if (m_nStyle & (TBBS_CHECKED | TBBS_INDETERMINATE)) { bLightImage = !bHighlight; } //---------------- // Draw the image: //---------------- if (!IsDrawImage ()) // Try to find a matched image { BOOL bImageSave = m_bImage; BOOL bUserButton = m_bUserButton; BOOL bSuccess = TRUE; m_bImage = TRUE; // Always try to draw image! m_bUserButton = TRUE; if (GetImage () < 0) { m_bUserButton = FALSE; if (GetImage () < 0) { bSuccess = FALSE; } } if (!bSuccess) { m_bImage = bImageSave; m_bUserButton = bUserButton; } } if(m_uiIndex == ID_BCGBARRES_TOOLBAR_RESET_PROMT) { m_bImage = FALSE; } BOOL bImageIsReady = FALSE; CRgn rgnClip; rgnClip.CreateRectRgnIndirect (&rectImage); if(m_iImage != -1) { FillInterior (pDC, rectFrameBtn, bHighlight); } if (!bDisableImage && IsDrawImage () && pImages != NULL) { BOOL bDrawImageShadow = bHighlight && !bCustomizeMode && CBCGPVisualManager::GetInstance ()->IsShadowHighlightedImage () && ((m_nStyle & TBBS_CHECKED) == 0) && ((m_nStyle & TBBS_DISABLED) == 0); pDC->SelectObject (&rgnClip); CPoint ptImageOffset ( (rectImage.Width () - CBCGPToolBar::GetMenuImageSize ().cx) / 2, (rectImage.Height () - CBCGPToolBar::GetMenuImageSize ().cy) / 2); if ((m_nStyle & TBBS_CHECKED) && !bCustomizeMode && !CBCGPVisualManager::GetInstance ()->IsShadowHighlightedImage ()) { ptImageOffset.x ++; ptImageOffset.y ++; } if ((m_nStyle & TBBS_PRESSED) || !(m_nStyle & TBBS_DISABLED) || !bGrayDisabledButtons || bCustomizeMode) { if (pUserTool != NULL) { pUserTool->DrawToolIcon (pDC, CRect (CPoint (rectImage.left + ptImageOffset.x, rectImage.top + ptImageOffset.y), CBCGPToolBar::GetMenuImageSize ())); } else { CPoint pt = rectImage.TopLeft (); pt += ptImageOffset; if (bDrawImageShadow) { pImages->Draw (pDC, pt.x, pt.y, GetImage (), FALSE, FALSE, FALSE, TRUE); pt.Offset (-1, -1); } pImages->Draw (pDC, pt.x, pt.y, GetImage ()); } if (bCustomizeMode || m_nStyle & TBBS_PRESSED) { bImageIsReady = TRUE; } } if (!bImageIsReady) { if (pUserTool != NULL) { pUserTool->DrawToolIcon (pDC, CRect (CPoint (rectImage.left + ptImageOffset.x, rectImage.top + ptImageOffset.y), CBCGPToolBar::GetMenuImageSize ())); } else { if (bDrawImageShadow) { pImages->Draw (pDC, rectImage.left + ptImageOffset.x, rectImage.top + ptImageOffset.y, GetImage (), FALSE, FALSE, FALSE, TRUE); rectImage.OffsetRect (-1, -1); } pImages->Draw (pDC, rectImage.left + ptImageOffset.x, rectImage.top + ptImageOffset.y, GetImage (), FALSE, bDisabled && bGrayDisabledButtons, FALSE, FALSE, bFadeImage); } bImageIsReady = TRUE; } } /* if (m_bAlwaysCallOwnerDraw || !bImageIsReady) { CFrameWnd* pParentFrame = m_pWndParent == NULL ? DYNAMIC_DOWNCAST (CFrameWnd, AfxGetMainWnd ()) : BCGCBProGetTopLevelFrame (m_pWndParent); //------------------------------------ // Get chance to user draw menu image: //------------------------------------ CBCGPMDIFrameWnd* pMainFrame = DYNAMIC_DOWNCAST (CBCGPMDIFrameWnd, pParentFrame); if (pMainFrame != NULL) { bImageIsReady = pMainFrame->OnDrawMenuImage (pDC, this, rectImage); } else // Maybe, SDI frame... { CBCGPFrameWnd* pFrame = DYNAMIC_DOWNCAST (CBCGPFrameWnd, pParentFrame); if (pFrame != NULL) { bImageIsReady = pFrame->OnDrawMenuImage (pDC, this, rectImage); } else // Maybe, OLE frame... { CBCGPOleIPFrameWnd* pOleFrame = DYNAMIC_DOWNCAST (CBCGPOleIPFrameWnd, pParentFrame); if (pOleFrame != NULL) { bImageIsReady = pOleFrame->OnDrawMenuImage (pDC, this, rectImage); } else { CBCGPOleDocIPFrameWnd* pOleDocFrame = DYNAMIC_DOWNCAST (CBCGPOleDocIPFrameWnd, pParentFrame); if (pOleDocFrame != NULL) { bImageIsReady = pOleDocFrame->OnDrawMenuImage (pDC, this, rectImage); } } } } } */ pDC->SelectClipRgn (NULL); rectImage.right ++; /* if (m_nStyle & TBBS_CHECKED && !bImageIsReady) { CRect rectCheck = rectImage; rectCheck.DeflateRect (0, 1); if (!bLightImage && bIsRarelyUsed) { pDC->FillRect (rectCheck, &globalData.brBtnFace); } CPoint pointCheck ( rectCheck.left + (rectCheck.Width () - sizeImage.cx) / 2, rectCheck.top + (rectCheck.Height () - sizeImage.cy) / 2); int iImage = m_bIsRadio ? CMenuImages::IdRadio : CMenuImages::IdCheck; FillInterior (pDC, rectCheck, bHighlight); CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, pointCheck, (m_nStyle & TBBS_DISABLED) ? CMenuImages::ImageGray : CMenuImages::ImageBlack); CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsPressed); } else if (bImageIsReady && bHighlight && !(m_nStyle & TBBS_CHECKED)) { CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsHighlighted); } else if (bImageIsReady && (m_nStyle & TBBS_CHECKED)) { CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsPressed); } */ int iSystemImageId = -1; /* //------------------------------- // Try to draw system menu icons: //------------------------------- if (!bImageIsReady) { switch (m_nID) { case SC_MINIMIZE: iSystemImageId = CMenuImages::IdMinimize; break; case SC_RESTORE: iSystemImageId = CMenuImages::IdRestore; break; case SC_CLOSE: iSystemImageId = CMenuImages::IdClose; break; case SC_MAXIMIZE: iSystemImageId = CMenuImages::IdMaximize; break; } if (iSystemImageId != -1) { CRect rectSysImage = rectImage; rectSysImage.DeflateRect (CBCGPVisualManager::GetInstance ()->GetMenuImageMargin (), CBCGPVisualManager::GetInstance ()->GetMenuImageMargin ()); CPoint pointSysImage ( rectSysImage.left + (rectSysImage.Width () - sizeImage.cx) / 2, rectSysImage.top + (rectSysImage.Height () - sizeImage.cy) / 2); FillInterior (pDC, rectFrameBtn, bHighlight); CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iSystemImageId, pointSysImage, bDisabled ? CMenuImages::ImageGray : CMenuImages::ImageBlack); if (bHighlight) { CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsHighlighted); } } } */ //------------------------------- // Fill text area if highlighted: //------------------------------- CRect rectText = rect; rectText.left = rectFrameBtn.right + CBCGPVisualManager::GetInstance ()->GetMenuImageMargin () + 2; COLORREF clrText; if (bHighlight) { CRect rectFill = rectFrameBtn; if ((m_nStyle & (TBBS_CHECKED) || bImageIsReady) || iSystemImageId != -1) { rectFill.left = rectText.left - 1; } rectFill.right = rect.right - 1; CRuntimeClass* pRTC = CBCGPVisualManager::GetInstance ()->GetRuntimeClass(); if(!pRTC->IsDerivedFrom(RUNTIME_CLASS(CBCGPVisualManagerXP))) { clrText = globalData.clrTextHilite; }else { clrText = globalData.clrBtnText; } } else { clrText = bDisabled ? globalData.clrGrayedText : globalData.clrBtnText; } //------------------------- // Find acceleration label: //------------------------- CString strText = m_strText; CString strAccel; int iTabOffset = m_strText.Find (_T('\t')); if (iTabOffset >= 0) { strText = strText.Left (iTabOffset); strAccel = m_strText.Mid (iTabOffset + 1); } //----------- // Draw text: //----------- COLORREF clrTextOld = pDC->GetTextColor (); rectText.left += TEXT_MARGIN; if (!m_bWholeText) { CString strEllipses (_T("...")); while (strText.GetLength () > 0 && pDC->GetTextExtent (strText + strEllipses).cx > rectText.Width ()) { strText = strText.Left (strText.GetLength () - 1); } strText += strEllipses; } if (bDisabled && !bHighlight) { pDC->SetTextColor (globalData.clrBtnHilite); CRect rectShft = rectText; rectShft.OffsetRect (1, 1); pDC->DrawText (strText, &rectShft, DT_SINGLELINE | DT_VCENTER); } pDC->SetTextColor (clrText); pDC->DrawText (strText, &rectText, DT_SINGLELINE | DT_VCENTER); //------------------------ // Draw accelerator label: //------------------------ if (!strAccel.IsEmpty ()) { CRect rectAccel = rectText; rectAccel.right -= TEXT_MARGIN + sizeImage.cx; if (bDisabled && !bHighlight) { pDC->SetTextColor (globalData.clrBtnHilite); CRect rectAccelShft = rectAccel; rectAccelShft.OffsetRect (1, 1); pDC->DrawText (strAccel, &rectAccelShft, DT_SINGLELINE | DT_RIGHT | DT_VCENTER); } pDC->SetTextColor (clrText); pDC->DrawText (strAccel, &rectAccel, DT_SINGLELINE | DT_RIGHT | DT_VCENTER); } //-------------------------------------------- // Draw triangle image for the cascade menues: //-------------------------------------------- if (m_nID == (UINT) -1 || m_bDrawDownArrow || m_bMenuOnly) { CFont* pRegFont = pDC->SelectObject (&globalData.fontMarlett); ASSERT (pRegFont != NULL); CRect rectTriangle = rect; //const CString strTriangle (_T("6")); // Marlett's right arrow CString strTriangle (_T("4")); // Marlett's right arrow if(TRUE == m_bQuickCustomMode) { strTriangle = _T("6"); // Marlett's down arrow } pDC->DrawText (strTriangle, &rectTriangle, DT_SINGLELINE | DT_RIGHT | DT_VCENTER); pDC->SelectObject (pRegFont); } if (pOldFont != NULL) { pDC->SelectObject (pOldFont); } pDC->SetTextColor (clrTextOld); } //**************************************************************************************** CString CBCGPCustomizeMenuButton::SearchCommandText(CMenu* pMenu, UINT in_uiCmd) { ASSERT (pMenu != NULL); int iCount = (int) pMenu->GetMenuItemCount (); for (int i = 0; i < iCount; i ++) { UINT uiCmd = pMenu->GetMenuItemID (i); if (uiCmd == in_uiCmd) { CString strText; pMenu->GetMenuString (i, strText, MF_BYPOSITION); return strText; } switch (uiCmd) { case 0: // Separator, ignore it. break; case -1: // Submenu { CMenu* pSubMenu = pMenu->GetSubMenu (i); CString strText = SearchCommandText (pSubMenu, in_uiCmd); if(strText != _T("")) return strText; } break; }//end switch }//end for return _T(""); } //**************************************************************************************** void CBCGPCustomizeMenuButton::DrawCheckBox(CDC* pDC, const CRect& rect, BOOL bHighlight) { CRect rectFrameBtn = rect; if (m_bShow && (!(m_nStyle & TBBS_DISABLED))) { CRect rectCheck = rect; rectCheck.DeflateRect (1, 1); CPoint pointCheck ( rect.left + ((rect.Width () / 2)-5), rect.top + ((rect.Height () / 2)-5)); int iImage = CMenuImages::IdCheck; UINT nStyle = m_nStyle; m_nStyle |= TBBS_CHECKED; FillInterior (pDC, rectCheck, bHighlight); m_nStyle = nStyle; CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, pointCheck, (m_nStyle & TBBS_DISABLED) ? CMenuImages::ImageGray : CMenuImages::ImageBlack); CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsPressed); } else if (m_bShow && (m_nStyle & TBBS_DISABLED)) { CRect rectCheck = rect; rectCheck.DeflateRect (0, 1); FillInterior (pDC, rectCheck, TRUE); CPoint pointCheck ( rectCheck.left + (rectCheck.Width () )/ 4, rectCheck.top + (rectCheck.Height () )/ 4); int iImage = CMenuImages::IdCheck; CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, pointCheck, CMenuImages::ImageGray ); CRect rcFrame = rectFrameBtn; rcFrame.DeflateRect(0,0,1,1); CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsPressed); } else if (bHighlight && !(m_nStyle & TBBS_CHECKED)) { //CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, // this, rectFrameBtn, CBCGPVisualManager::ButtonsIsHighlighted); } else if ((m_nStyle & TBBS_CHECKED)) { CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, this, rectFrameBtn, CBCGPVisualManager::ButtonsIsPressed); } } //**************************************************************************************** void CBCGPCustomizeMenuButton::UpdateCustomizeButton() { CCustomizeButton* pCustomizeBtn = m_pWndToolBar->GetCustomizeButton (); if ((pCustomizeBtn != NULL) && (pCustomizeBtn->GetExtraSize () != CSize (0, 0))) { CRect rect = pCustomizeBtn->GetInvalidateRect (); rect.InflateRect (10, 10); m_pWndToolBar->InvalidateRect (rect); rect.InflateRect (pCustomizeBtn->GetExtraSize ()); m_pWndToolBar->RedrawWindow (rect, NULL, RDW_FRAME | RDW_INVALIDATE); } } //**************************************************************************************** BOOL CBCGPCustomizeMenuButton::IsCommandExist(UINT uiCmdId) { int nTmp = 0; return m_mapPresentIDs.Lookup(uiCmdId, nTmp); }