// This MFC Library source code supports the Microsoft Office Fluent User Interface // (the "Fluent UI") and is provided only as referential material to supplement the // Microsoft Foundation Classes Reference and related electronic documentation // included with the MFC C++ library software. // License terms to copy, use or distribute the Fluent UI are available separately. // To learn more about our Fluent UI licensing program, please visit // http://go.microsoft.com/fwlink/?LinkId=238214. // // Copyright (C) Microsoft Corporation // All rights reserved. #pragma once #include "afxcontrolbarutil.h" #include "afxbaseribbonelement.h" #include <__atlmfc_core.h> #pragma warning(push) #pragma warning(disable : _ATLMFC_DISABLED_WARNINGS) #ifdef _AFX_PACKING #pragma pack(push, _AFX_PACKING) #endif #ifdef _AFX_MINREBUILD #pragma component(minrebuild, off) #endif #define AFX_RIBBON_IMAGE_AUTO 9999 class CMFCRibbonButton : public CMFCRibbonBaseElement { friend class CMFCRibbonPanel; friend class CMFCRibbonPanelMenuBar; friend class CMFCToolTipCtrl; friend class CMFCRibbonCollector; friend class CMFCRibbonConstructor; DECLARE_DYNCREATE(CMFCRibbonButton) // Construction public: CMFCRibbonButton(); CMFCRibbonButton(UINT nID, LPCTSTR lpszText, int nSmallImageIndex = -1, int nLargeImageIndex = -1, BOOL bAlwaysShowDescription = FALSE); CMFCRibbonButton(UINT nID, LPCTSTR lpszText, HICON hIcon, BOOL bAlwaysShowDescription = FALSE, HICON hIconSmall = NULL, BOOL bAutoDestroyIcon = FALSE, BOOL bAlphaBlendIcon = FALSE); virtual ~CMFCRibbonButton(); // Attributes public: virtual void SetText(LPCTSTR lpszText); virtual void SetDescription(LPCTSTR lpszText); virtual BOOL IsDefaultPanelButton() const { return FALSE; } virtual BOOL IsApplicationButton() const { return FALSE; } void SetMenu(HMENU hMenu, BOOL bIsDefaultCommand = FALSE, BOOL bRightAlign = FALSE); void SetMenu(UINT uiMenuResID, BOOL bIsDefaultCommand = FALSE, BOOL bRightAlign = FALSE); HMENU GetMenu() const { return m_hMenu; } void SetDefaultCommand(BOOL bSet = TRUE) { m_bIsDefaultCommand = bSet; } BOOL IsDefaultCommand() const { return m_bIsDefaultCommand; } void SetRightAlignMenu(BOOL bSet = TRUE) { m_bRightAlignMenu = bSet; } BOOL IsRightAlignMenu() const { return m_bRightAlignMenu; } virtual BOOL HasMenu() const { return m_hMenu != NULL || m_arSubItems.GetSize() > 0; } virtual BOOL IsCommandAreaHighlighted() const { return m_bIsCommandHighlighted && IsHighlighted(); } virtual BOOL IsMenuAreaHighlighted() const { return m_bIsMenuHighlighted && IsHighlighted(); } CRect GetMenuRect() const { return m_rectMenu; } CRect GetCommandRect() const { return m_rectCommand; } BOOL IsMenuOnBottom() const { return m_bMenuOnBottom; } virtual BOOL IsAlwaysDrawBorder() const { return m_bForceDrawBorder; } virtual BOOL CanBeStretched(); BOOL IsSingleLineText() const { return m_sizeTextBottom.cy == m_sizeTextRight.cy; } int GetTextRowHeight() const { return m_sizeTextRight.cy; } const CArray& GetSubItems() const { return m_arSubItems; } int GetImageIndex(BOOL bLargeImage) const { return bLargeImage ? m_nLargeImageIndex : m_nSmallImageIndex; } void SetImageIndex(int nIndex, BOOL bLargeImage) { if (bLargeImage) { m_nLargeImageIndex = nIndex; } else { m_nSmallImageIndex = nIndex; } } BOOL IsLargeImage() const { return m_bIsLargeImage; } HICON GetIcon(BOOL bLargeIcon = TRUE) const { return bLargeIcon ? m_hIcon : m_hIconSmall; } virtual BOOL IsAlwaysLargeImage () const { return m_bIsAlwaysLarge || (m_nLargeImageIndex >= 0 && m_nSmallImageIndex < 0); } void SetAlwaysLargeImage(BOOL bSet = TRUE) { m_bIsAlwaysLarge = bSet; } virtual BOOL SetACCData(CWnd* pParent, CAccessibilityData& data); AFX_IMPORT_DATA static BOOL m_bUseMenuHandle; // Operations public: void AddSubItem(CMFCRibbonBaseElement* pSubItem, int nIndex = -1); int FindSubItemIndexByID(UINT uiID) const; BOOL RemoveSubItem(int nIndex); void RemoveAllSubItems(); CSize DrawBottomText(CDC* pDC, BOOL bCalcOnly); protected: void CommonInit(); void FillWindowList(); int GetGroupButtonExtraWidth(); // Overrides public: virtual void OnDraw(CDC* pDC); virtual CSize GetRegularSize(CDC* pDC); virtual CSize GetCompactSize(CDC* pDC); virtual CSize GetIntermediateSize(CDC* pDC); virtual BOOL HasLargeMode() const { return GetImageSize(RibbonImageLarge) != CSize(0, 0); } virtual BOOL HasIntermediateMode() const { return !m_strText.IsEmpty(); } virtual BOOL HasCompactMode() const { return GetImageSize(RibbonImageSmall) != CSize(0, 0); } virtual void DrawImage(CDC* pDC, RibbonImageType type, CRect rectImage); virtual CSize GetImageSize(RibbonImageType type) const; virtual void OnCalcTextSize(CDC* pDC); virtual void CleanUpSizes() { m_sizeTextRight = m_sizeTextBottom = CSize(0, 0); } virtual void SetParentCategory(CMFCRibbonCategory* pParent); virtual void ClosePopupMenu(); virtual CString GetToolTipText() const; virtual int DrawRibbonText(CDC* pDC, const CString& strText, CRect rectText, UINT uiDTFlags, COLORREF clrText = (COLORREF)-1); virtual void OnClick(CPoint point); virtual void OnAccDefaultAction(); virtual BOOL IsDrawTooltipImage() const { return TRUE; } virtual BOOL IsPopupDefaultMenuLook() const { return TRUE; } virtual COLORREF OnFillBackground(CDC* pDC); virtual void OnDrawBorder(CDC* pDC); protected: virtual void OnDrawOnList(CDC* pDC, CString strText, int nTextOffset, CRect rect, BOOL bIsSelected, BOOL bHighlighted); virtual int AddToListBox(CMFCRibbonCommandsListBox* pWndListBox, BOOL bDeep); virtual void OnLButtonDown(CPoint point); virtual void OnLButtonUp(CPoint point); virtual void OnMouseMove(CPoint point); virtual void OnShowPopupMenu(); virtual void CopyFrom(const CMFCRibbonBaseElement& src); virtual void SetOriginal(CMFCRibbonBaseElement* pOriginal); virtual CMFCRibbonBaseElement* FindByID(UINT uiCmdID); virtual CMFCRibbonBaseElement* FindByData(DWORD_PTR dwData); virtual void GetElementsByID(UINT uiCmdID, CArray& arElements); virtual void GetElements(CArray& arElements); virtual int GetTextOffset() const { return m_szMargin.cx; } virtual void SetParentRibbonBar(CMFCRibbonBar* pRibbonBar); virtual CRect GetKeyTipRect(CDC* pDC, BOOL bIsMenu); virtual BOOL OnKey(BOOL bIsMenuKey); virtual void OnAfterChangeRect(CDC* pDC); virtual void SetMargin(const CSize& sizeMargin) { m_szMargin = sizeMargin; } // Attributes protected: CSize m_sizeTextRight; CSize m_sizeTextBottom; CSize m_szMargin; CRect m_rectMenu; CRect m_rectCommand; int m_nSmallImageIndex; int m_nLargeImageIndex; int m_nMenuArrowMargin; int m_nWindowsMenuItems; int m_nWrapIndex; HMENU m_hMenu; HICON m_hIcon; HICON m_hIconSmall; BOOL m_bRightAlignMenu; BOOL m_bIsDefaultCommand; BOOL m_bAutodestroyMenu; BOOL m_bMenuOnBottom; BOOL m_bIsMenuHighlighted; BOOL m_bIsCommandHighlighted; BOOL m_bAutoDestroyIcon; BOOL m_bAlphaBlendIcon; BOOL m_bForceDrawBorder; BOOL m_bToBeClosed; BOOL m_bAlwaysShowDescription; BOOL m_bIsLargeImage; BOOL m_bCreatedFromMenu; BOOL m_bIsWindowsMenu; CArray m_arWordIndexes; CArray m_arSubItems; }; #ifdef _AFX_MINREBUILD #pragma component(minrebuild, on) #endif #ifdef _AFX_PACKING #pragma pack(pop) #endif // _ATLMFC_DISABLED_WARNINGS #pragma warning(pop)