// StandardToolBar.cpp : implementation file // #include "stdafx.h" #include "StandardToolBar.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IDC_COMBO 1022 const int nDropHeight=200; ///////////////////////////////////////////////////////////////////////////// // CStandardToolBar CStandardToolBar::CStandardToolBar() { m_nComboItemIndex=-1; m_nSavedCurSel=-1; } CStandardToolBar::~CStandardToolBar() { } BEGIN_MESSAGE_MAP(CStandardToolBar, COXCoolToolBar) //{{AFX_MSG_MAP(CStandardToolBar) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStandardToolBar message handlers BOOL CStandardToolBar::CreateCombo(int nItemIndex) { // retrieve button info GetButtonInfo(nItemIndex,m_nID,m_nStyle,m_nImage); // retrieve tooltip CString sTooltip=GetButtonTooltip(nItemIndex); // Create the combo box SetButtonInfo(nItemIndex,IDC_COMBO,TBBS_SEPARATOR,180); // Design guide advises 12 pixel gap between combos and buttons CRect rect; GetItemRect(nItemIndex, &rect); rect.top = 1; rect.bottom = rect.top + nDropHeight; if (!m_combo.Create(CBS_DROPDOWN|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL, rect, this, IDC_COMBO)) { TRACE(_T("Failed to create combo-box\n")); return FALSE; } static CFont font; if((HFONT)font!=NULL) font.DeleteObject(); font.CreatePointFont(-80,_T("MS Sans Serif")); m_combo.SetFont(&font); m_combo.SetTooltipText(sTooltip); m_combo.AddString(_T("OnToolTipText")); m_combo.AddString(_T("::LoadTool")); m_combo.AddString(_T("ID_VIEW_TOOLBAR")); m_combo.AddString(_T("class CWnd")); m_combo.AddString(_T("SetFont")); m_combo.AddString(_T("class CTabCtrl")); m_nComboItemIndex=nItemIndex; return TRUE; } static BOOL bChangeDockSideCalledFirstTime=TRUE; void CStandardToolBar::OnChangeDockSide(DWORD dwDockSide) { COXCoolToolBar::OnChangeDockSide(dwDockSide); if(bChangeDockSideCalledFirstTime) { bChangeDockSideCalledFirstTime=FALSE; return; } if((m_pDockBar == NULL || (GetBarStyle() & CBRS_FLOATING)) || dwDockSide==CBRS_ALIGN_RIGHT || dwDockSide==CBRS_ALIGN_LEFT) { if(::IsWindow(m_combo.GetSafeHwnd())) { m_nSavedCurSel=m_combo.GetCurSel(); m_combo.DestroyWindow(); SetButtonInfo(m_nComboItemIndex, m_nID, m_nStyle, m_nImage); } } else { if(!::IsWindow(m_combo.GetSafeHwnd()) && m_nComboItemIndex!=-1) { // CreateCombo function might change the visibility // of the bar. We have to restore it. BOOL bIsVisible=IsWindowVisible(); CreateCombo(m_nComboItemIndex); m_combo.SetCurSel(m_nSavedCurSel); if(bIsVisible) SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER| SWP_NOACTIVATE|SWP_SHOWWINDOW); else SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER| SWP_NOACTIVATE|SWP_HIDEWINDOW); } } } static BOOL bFloatingDockingCalledFirstTime=TRUE; void CStandardToolBar::OnFloatingDocking(BOOL bFloating) { COXCoolToolBar::OnFloatingDocking(bFloating); if(bFloatingDockingCalledFirstTime) { bFloatingDockingCalledFirstTime=FALSE; return; } OnChangeDockSide(GetBarStyle()&CBRS_ALIGN_ANY); GetParentFrame()->DelayRecalcLayout(); }