From 81ccbc1497e0d989d0afa1e7c396547779b85dfe Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sun, 2 Oct 2011 19:07:54 +0200 Subject: [PATCH] do not show drop down arrow if menu only contains one item Signed-off-by: Sven Strickroth --- src/Utils/MiscUI/MenuButton.cpp | 23 ++++++++++++++++++++++- src/Utils/MiscUI/MenuButton.h | 5 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Utils/MiscUI/MenuButton.cpp b/src/Utils/MiscUI/MenuButton.cpp index 4151982a4..727ec9e7a 100644 --- a/src/Utils/MiscUI/MenuButton.cpp +++ b/src/Utils/MiscUI/MenuButton.cpp @@ -35,10 +35,12 @@ IMPLEMENT_DYNCREATE(CMenuButton, CMFCMenuButton) CMenuButton::CMenuButton(void) : CMFCMenuButton() , m_nDefault(-1) , m_bMarkDefault(TRUE) + , m_bRealMenuIsActive(false) { m_bOSMenu = TRUE; m_bDefaultClick = TRUE; m_bTransparent = TRUE; + m_bMenuIsActive = TRUE; m_btnMenu.CreatePopupMenu(); m_hMenu = m_btnMenu.GetSafeHmenu(); @@ -65,12 +67,16 @@ void CMenuButton::RemoveAll() { m_sEntries.RemoveAll(); m_nDefault = m_nMenuResult = -1; + m_bMenuIsActive = TRUE; } INT_PTR CMenuButton::AddEntry(const CString& sEntry) { INT_PTR ret = m_sEntries.Add(sEntry); m_btnMenu.AppendMenu(MF_STRING | MF_BYCOMMAND, m_sEntries.GetCount(), sEntry); + if (m_sEntries.GetCount() == 2) + m_bMenuIsActive = FALSE; + if (ret == 0) SetCurrentEntry(ret); return ret; @@ -123,4 +129,19 @@ void CMenuButton::OnDestroy() m_sEntries.RemoveAll(); CMFCMenuButton::OnDestroy(); -} \ No newline at end of file +} + +void CMenuButton::OnDraw(CDC* pDC, const CRect& rect, UINT uiState) +{ + if (m_bMenuIsActive && !m_bRealMenuIsActive) + CMFCButton::OnDraw(pDC, rect, uiState); + else + CMFCMenuButton::OnDraw(pDC, rect, uiState); +} + +void CMenuButton::OnShowMenu() +{ + m_bRealMenuIsActive = true; + CMFCMenuButton::OnShowMenu(); + m_bRealMenuIsActive = false; +} diff --git a/src/Utils/MiscUI/MenuButton.h b/src/Utils/MiscUI/MenuButton.h index b4300e5d0..db79ab678 100644 --- a/src/Utils/MiscUI/MenuButton.h +++ b/src/Utils/MiscUI/MenuButton.h @@ -78,6 +78,11 @@ public: protected: virtual BOOL PreTranslateMessage(MSG* pMsg); + + bool m_bRealMenuIsActive; + virtual void OnShowMenu(); + afx_msg void OnDraw(CDC* pDC, const CRect& rect, UINT uiState); + afx_msg BOOL OnClicked(); afx_msg void OnDestroy(); -- 2.11.4.GIT