void CBCGPSmartDockingManager::Start (CWnd* pDockingWnd) { if (!m_bCreated) { return; } if (m_bStarted) { return; } ASSERT_VALID (pDockingWnd); m_pDockingWnd = pDockingWnd; m_wndPlaceMarker.SetDockingWnd (m_pDockingWnd); m_nHiliteSideNo = CBCGPSmartDockingMarker::sdNONE; m_dwEnabledAlignment = CBRS_ALIGN_ANY; if (m_pDockingWnd != NULL) { CBCGPMiniFrameWnd* pMiniFrame = DYNAMIC_DOWNCAST (CBCGPMiniFrameWnd, m_pDockingWnd); if (pMiniFrame != NULL) { CBCGPDockingControlBar* pFisrtBar = DYNAMIC_DOWNCAST (CBCGPDockingControlBar, pMiniFrame->GetFirstVisibleBar ()); if (pFisrtBar != NULL) { m_dwEnabledAlignment = pFisrtBar->GetEnabledAlignment (); } } } CBCGPSmartDockingMarker::SDMarkerPlace i; for (i = CBCGPSmartDockingMarker::sdLEFT; i <= CBCGPSmartDockingMarker::sdBOTTOM; ++reinterpret_cast<int&>(i)) { m_arMarkers[i]->AdjustPos (&m_rcOuter); if (((m_dwEnabledAlignment & CBRS_ALIGN_LEFT) != 0) && i == CBCGPSmartDockingMarker::sdLEFT || ((m_dwEnabledAlignment & CBRS_ALIGN_RIGHT) != 0) && i == CBCGPSmartDockingMarker::sdRIGHT || ((m_dwEnabledAlignment & CBRS_ALIGN_TOP) != 0) && i == CBCGPSmartDockingMarker::sdTOP || ((m_dwEnabledAlignment & CBRS_ALIGN_BOTTOM) != 0) && i == CBCGPSmartDockingMarker::sdBOTTOM) { m_arMarkers[i]->Show (TRUE); } } m_bShown = TRUE; m_bCentralGroupShown = FALSE; m_bStarted = TRUE; }
//------------------------------------------------------------------------// void CBCGPGlobalUtils::CalcExpectedDockedRect (CBCGPBarContainerManager& barContainerManager, CWnd* pWndToDock, CPoint ptMouse, CRect& rectResult, BOOL& bDrawTab, CBCGPDockingControlBar** ppTargetBar) { ASSERT (ppTargetBar != NULL); DWORD dwAlignment = CBRS_ALIGN_ANY; BOOL bTabArea = FALSE; BOOL bCaption = FALSE; bDrawTab = FALSE; *ppTargetBar = NULL; rectResult.SetRectEmpty (); if (GetKeyState (VK_CONTROL) < 0) { return; } if (!GetCBAndAlignFromPoint (barContainerManager, ptMouse, ppTargetBar, dwAlignment, bTabArea, bCaption) || *ppTargetBar == NULL) { return; } CBCGPControlBar* pBar = NULL; if (pWndToDock->IsKindOf (RUNTIME_CLASS (CBCGPMiniFrameWnd))) { CBCGPMiniFrameWnd* pMiniFrame = DYNAMIC_DOWNCAST (CBCGPMiniFrameWnd, pWndToDock); ASSERT_VALID (pMiniFrame); pBar = DYNAMIC_DOWNCAST (CBCGPControlBar, pMiniFrame->GetFirstVisibleBar ()); } else { pBar = DYNAMIC_DOWNCAST (CBCGPControlBar, pWndToDock); } if (*ppTargetBar != NULL) { DWORD dwTargetEnabledAlign = (*ppTargetBar)->GetEnabledAlignment (); DWORD dwTargetCurrentAlign = (*ppTargetBar)->GetCurrentAlignment (); BOOL bTargetBarIsFloating = ((*ppTargetBar)->GetParentMiniFrame () != NULL); if (pBar != NULL) { if (pBar->GetEnabledAlignment () != dwTargetEnabledAlign && bTargetBarIsFloating || (pBar->GetEnabledAlignment () & dwTargetCurrentAlign) == 0 && !bTargetBarIsFloating) { return; } } } if (bTabArea || bCaption) { // can't make tab on miniframe bDrawTab = ((*ppTargetBar) != NULL); if (bDrawTab) { bDrawTab = (*ppTargetBar)->CanBeAttached () && CanBeAttached (pWndToDock) && pBar != NULL && ((*ppTargetBar)->GetEnabledAlignment () == pBar->GetEnabledAlignment ()); } if (!bDrawTab) { return; } } if ((*ppTargetBar) != NULL && (*ppTargetBar)->GetParentMiniFrame () != NULL && !IsWndCanFloatMulti (pWndToDock)) { bDrawTab = FALSE; return; } if ((*ppTargetBar) != NULL && pWndToDock->IsKindOf (RUNTIME_CLASS (CBCGPBaseControlBar)) && !(*ppTargetBar)->CanAcceptBar ((CBCGPBaseControlBar*) pWndToDock)) { bDrawTab = FALSE; return; } CRect rectOriginal; (*ppTargetBar)->GetWindowRect (rectOriginal); if ((*ppTargetBar) == pWndToDock || pWndToDock->IsKindOf (RUNTIME_CLASS (CBCGPMiniFrameWnd)) && (*ppTargetBar)->GetParentMiniFrame () == pWndToDock) { bDrawTab = FALSE; return; } CRect rectInserted; CRect rectSlider; DWORD dwSliderStyle; CSize sizeMinOriginal (0, 0); CSize sizeMinInserted (0, 0); pWndToDock->GetWindowRect (rectInserted); if ((dwAlignment & pBar->GetEnabledAlignment ()) != 0 || CBCGPDockManager::m_bIgnoreEnabledAlignment) { barContainerManager.CalcRects (rectOriginal, rectInserted, rectSlider, dwSliderStyle, dwAlignment, sizeMinOriginal, sizeMinInserted); rectResult = rectInserted; } }