//************************************************************************************ BOOL CBCGPShowAllButton::OnClick (CWnd* /*pWnd*/, BOOL bDelay) { CBCGPPopupMenuBar* pParentMenuBar = DYNAMIC_DOWNCAST (CBCGPPopupMenuBar, m_pWndParent); if (pParentMenuBar == NULL) { ASSERT (FALSE); return FALSE; } if (bDelay) { if (CBCGPMenuBar::IsShowAllCommandsDelay ()) { pParentMenuBar->StartPopupMenuTimer (this, 2); } return TRUE; } CBCGPPopupMenu* pParentMenu = DYNAMIC_DOWNCAST (CBCGPPopupMenu, pParentMenuBar->GetParent ()); if (pParentMenu == NULL) { ASSERT (FALSE); return FALSE; } pParentMenu->ShowAllCommands (); return 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; }