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);
	}
Exemple #2
0
void CRibbonListButton::OnShowPopupMenu ()
{
	ASSERT_VALID (this);

	CBCGPBaseRibbonElement::OnShowPopupMenu ();

	if (m_sizeMaxText == CSize (0, 0))
	{
		CBCGPRibbonBar* pRibbonBar = GetTopLevelRibbonBar ();
		ASSERT_VALID (pRibbonBar);

		CClientDC dc (pRibbonBar);

		CFont* pOldFont = dc.SelectObject (pRibbonBar->GetFont ());
		ASSERT (pOldFont != NULL);

		int i = 0;

		for (i = 0; i < m_arLabels.GetSize (); i++)
		{
			CSize szText = dc.GetTextExtent (m_arLabels [i]);

			m_sizeMaxText.cx = max (m_sizeMaxText.cx, szText.cx);
			m_sizeMaxText.cy = max (m_sizeMaxText.cy, szText.cy);
		}

		const int cxImage = m_listImages.GetImageSize ().cx;

		for (i = 0; i < m_arSubItems.GetSize (); i++)
		{
			CBCGPBaseRibbonElement* pButton = m_arSubItems [i];
			ASSERT_VALID (pButton);

			CString strText = pButton->GetText ();
			CSize szText = dc.GetTextExtent (strText);

			m_sizeMaxText.cx = max (m_sizeMaxText.cx, szText.cx - cxImage);
		}

		dc.SelectObject (pOldFont);
	}

	CBCGPRibbonPaletteButton::OnShowPopupMenu ();
}
//*************************************************************************************
void CBCGPKeyMapDlg::OnSelchangeCategory() 
{
	UpdateData ();

	ASSERT (m_lpAccel != NULL);

	int iIndex = m_wndCategoryList.GetCurSel ();
	if (iIndex == LB_ERR)
	{
		return;
	}

	HINSTANCE hInstRes = AfxGetResourceHandle ();

#ifndef BCGP_EXCLUDE_RIBBON
	if (m_pWndRibbonBar != NULL)
	{
		CBCGPRibbonCategory* pCategory = NULL;

		if (m_pWndRibbonBar->GetMainCategory () != NULL)
		{
			iIndex--;

			if (iIndex < 0)
			{
				pCategory = m_pWndRibbonBar->GetMainCategory ();
			}
		}

		if (pCategory == NULL)
		{
			pCategory = m_pWndRibbonBar->GetCategory (iIndex);
		}

		ASSERT_VALID(pCategory);

		CArray<CBCGPBaseRibbonElement*, CBCGPBaseRibbonElement*> arElements;
		pCategory->GetElements (arElements);

		AfxSetResourceHandle (m_hInstDefault);

		int nItem = 0;
		m_KeymapList.DeleteAllItems();

		for (int i = 0; i < (int)arElements.GetSize (); i++)
		{
			CBCGPBaseRibbonElement* pElem = arElements [i];
			ASSERT_VALID (pElem);

			if (!pElem->IsKindOf (RUNTIME_CLASS (CBCGPRibbonSeparator)) && pElem->GetID() > 0 && pElem->GetID() != (UINT) -1)
			{
				CString strLabel = pElem->GetToolTip();
				if (strLabel.IsEmpty ())
				{
					strLabel = pElem->GetText();
				}

				if (!strLabel.IsEmpty())
				{
					OnInsertItem(pElem, nItem);

					if (m_bItemWasAdded)
					{
						nItem++;
					}
				}
			}
		}
	}
	else
#endif
	{
		CObList* pCategoryButtonsList = (CObList*) m_wndCategoryList.GetItemData (iIndex);
		ASSERT_VALID (pCategoryButtonsList);

		AfxSetResourceHandle (m_hInstDefault);

		int nItem = 0;
		m_KeymapList.DeleteAllItems();

		for (POSITION pos = pCategoryButtonsList->GetHeadPosition (); pos != NULL;)
		{
			CBCGPToolbarButton* pButton = (CBCGPToolbarButton*) pCategoryButtonsList->GetNext (pos);
			ASSERT (pButton != NULL);

			if (pButton->m_nID > 0 && pButton->m_nID != (UINT) -1)
			{
				OnInsertItem (pButton, nItem);

				if (m_bItemWasAdded)
				{
					nItem++;
				}
			}
		}
	}

	m_KeymapList.SortItems (listCompareFunc, (LPARAM) this);
	AfxSetResourceHandle (hInstRes);
}