📄 bcgprecentdockinfo.cpp
字号:
// BCGPRecentDockInfo.cpp: implementation of the CBCGPRecentDockInfo class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "bcgcbpro.h"
#include "BCGPRecentDockInfo.h"
#include "BCGPBarContainerManager.h"
#include "BCGPBarContainer.h"
#include "BCGPDockBar.h"
#include "BCGPDockBarRow.h"
#include "BCGPSlider.h"
#include "BCGPMiniFrameWnd.h"
#include "BCGPDockingControlBar.h"
#include "BCGPBaseTabWnd.h"
#include "BCGPBaseTabbedBar.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBCGPRecentContainerInfo::CBCGPRecentContainerInfo ()
{
Init ();
}
//*****************************************************************************
CBCGPRecentContainerInfo::~CBCGPRecentContainerInfo ()
{
}
//*****************************************************************************
void CBCGPRecentContainerInfo::Init ()
{
m_pRecentBarContainer = NULL;
m_rectDockedRect.SetRect (0, 0, 30, 30);
m_nRecentPercent = 50;
m_bIsRecentLeftBar = TRUE;
m_pRecentContanerOfTabWnd = NULL;
}
//*****************************************************************************
void CBCGPRecentContainerInfo::StoreDockInfo (CBCGPBarContainer* pRecentContainer,
CBCGPDockingControlBar* pBar,
CBCGPDockingControlBar* pTabbedBar)
{
ASSERT_VALID (this);
ASSERT_VALID (pRecentContainer);
try
{
if (pRecentContainer == m_pRecentBarContainer &&
m_pRecentBarContainer->m_dwRefCount == 0 ||
pRecentContainer->m_dwRefCount < 0)
{
ASSERT (FALSE);
}
if (pRecentContainer != NULL)
{
pRecentContainer->AddRef ();
m_bIsRecentLeftBar = (pTabbedBar != NULL) ?
pRecentContainer->IsLeftBar (pTabbedBar) : pRecentContainer->IsLeftBar (pBar);
}
if (m_pRecentBarContainer != NULL)
{
CBCGPBarContainerManager* pManager = m_pRecentBarContainer->m_pContainerManager;
m_pRecentBarContainer->m_dwRefCount--;
//m_pRecentBarContainer->Release ();
if (m_pRecentBarContainer->m_dwRefCount <= 0)
{
pManager->m_pRootContainer->ReleaseEmptyContainer ();
}
m_pRecentBarContainer = NULL;
}
if (m_pRecentContanerOfTabWnd != NULL)
{
CBCGPBarContainerManager* pManager = m_pRecentContanerOfTabWnd->m_pContainerManager;
m_pRecentContanerOfTabWnd->m_dwRefCount--;
if (m_pRecentContanerOfTabWnd->m_dwRefCount <= 0)
{
pManager->m_pRootContainer->ReleaseEmptyContainer ();
}
m_pRecentContanerOfTabWnd = NULL;
}
pBar->GetWindowRect (m_rectDockedRect);
if (pTabbedBar == NULL)
{
m_pRecentBarContainer = pRecentContainer;
}
else
{
m_pRecentContanerOfTabWnd = pRecentContainer;
}
m_nRecentPercent = (pTabbedBar != NULL) ?
pTabbedBar->GetLastPercentInContainer () : pBar->GetLastPercentInContainer ();
if (m_pRecentBarContainer != NULL && m_pRecentBarContainer->GetRefCount () == 0 ||
m_pRecentContanerOfTabWnd != NULL && m_pRecentContanerOfTabWnd->GetRefCount () == 0)
{
ASSERT (FALSE);
}
}
catch (...)
{
}
}
//*****************************************************************************
void CBCGPRecentContainerInfo::SetInfo (CBCGPRecentContainerInfo& srcInfo)
{
if (srcInfo.m_pRecentBarContainer != NULL)
{
srcInfo.m_pRecentBarContainer->AddRef ();
}
if (m_pRecentBarContainer != NULL)
{
m_pRecentBarContainer->Release ();
}
m_pRecentBarContainer = srcInfo.m_pRecentBarContainer;
m_rectDockedRect = srcInfo.m_rectDockedRect;
m_nRecentPercent = srcInfo.m_nRecentPercent;
if (srcInfo.m_pRecentContanerOfTabWnd != NULL)
{
srcInfo.m_pRecentContanerOfTabWnd->AddRef ();
}
if (m_pRecentContanerOfTabWnd != NULL)
{
m_pRecentContanerOfTabWnd->Release ();
}
m_pRecentContanerOfTabWnd = srcInfo.m_pRecentContanerOfTabWnd;
m_lstRecentListOfBars.RemoveAll ();
m_lstRecentListOfBars.AddTail (&srcInfo.m_lstRecentListOfBars);
}
//-----------------------------------------------------------------------------//
// CBCGPRecentDockInfo implementation
//-----------------------------------------------------------------------------//
CBCGPRecentDockInfo::CBCGPRecentDockInfo(CBCGPControlBar* pBar)
{
m_pBar = pBar;
Init ();
}
//*****************************************************************************
CBCGPRecentDockInfo::~CBCGPRecentDockInfo()
{
}
//*****************************************************************************
void CBCGPRecentDockInfo::Init ()
{
m_rectRecentFloatingRect.SetRect (10, 10, 110, 110);
m_nRecentRowIndex = 0;
m_pRecentDockBar = NULL;
m_pRecentDockBarRow = NULL;
m_nRecentTabNumber = -1;
m_hRecentDefaultSlider = NULL;
m_hRecentMiniFrame = NULL;
m_dwRecentAlignmentToFrame = CBRS_ALIGN_LEFT;
}
//*****************************************************************************
void CBCGPRecentDockInfo::CleanUp ()
{
Init ();
m_recentSliderInfo.Init ();
m_recentMiniFrameInfo.Init ();
}
//*****************************************************************************
void CBCGPRecentDockInfo::StoreDockInfo (CBCGPBarContainer* pRecentContainer,
CBCGPDockingControlBar* pTabbedBar)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pBar);
ASSERT_KINDOF (CBCGPDockingControlBar, m_pBar); // get here only for docking bars
CBCGPDockingControlBar* pBar =
DYNAMIC_DOWNCAST (CBCGPDockingControlBar, m_pBar);
CBCGPSlider* pDefaultSlider = (pTabbedBar != NULL) ?
pTabbedBar->GetDefaultSlider () : pBar->GetDefaultSlider ();
CBCGPMiniFrameWnd* pMiniFrame = pBar->GetParentMiniFrame ();
if (pMiniFrame != NULL)
{
CBCGPMiniFrameWnd* pRecentMiniFrame =
DYNAMIC_DOWNCAST (CBCGPMiniFrameWnd,
CWnd::FromHandlePermanent (m_hRecentMiniFrame));
m_hRecentMiniFrame = pMiniFrame->GetSafeHwnd ();
m_recentMiniFrameInfo.StoreDockInfo (pRecentContainer, pBar, pTabbedBar);
pMiniFrame->ScreenToClient (m_recentMiniFrameInfo.m_rectDockedRect);
pMiniFrame->GetWindowRect (m_rectRecentFloatingRect);
if (pRecentMiniFrame != NULL)
{
pRecentMiniFrame->PostMessage (BCGPM_CHECKEMPTYMINIFRAME);
}
}
else if (pDefaultSlider != NULL)
{
m_recentSliderInfo.StoreDockInfo (pRecentContainer, pBar, pTabbedBar);
pBar->GetDockSite ()->ScreenToClient (m_recentSliderInfo.m_rectDockedRect);
m_hRecentDefaultSlider = pDefaultSlider->GetSafeHwnd ();
m_dwRecentAlignmentToFrame = pDefaultSlider->GetCurrentAlignment ();
}
else
{
m_hRecentMiniFrame = NULL;
m_recentMiniFrameInfo.StoreDockInfo (NULL, pBar);
}
}
//*****************************************************************************
CBCGPBarContainer* CBCGPRecentDockInfo::GetRecentContainer (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_pRecentBarContainer :
m_recentMiniFrameInfo.m_pRecentBarContainer;
}
//*****************************************************************************
CBCGPBarContainer* CBCGPRecentDockInfo::GetRecentTabContainer (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_pRecentContanerOfTabWnd:
m_recentMiniFrameInfo.m_pRecentContanerOfTabWnd;
}
//*****************************************************************************
CRect& CBCGPRecentDockInfo::GetRecentDockedRect (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_rectDockedRect :
m_recentMiniFrameInfo.m_rectDockedRect;
}
//*****************************************************************************
int CBCGPRecentDockInfo::GetRecentDockedPercent (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_nRecentPercent :
m_recentMiniFrameInfo.m_nRecentPercent;
}
//*****************************************************************************
BOOL CBCGPRecentDockInfo::IsRecentLeftBar (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_bIsRecentLeftBar :
m_recentMiniFrameInfo.m_bIsRecentLeftBar;
}
//*****************************************************************************
void CBCGPRecentDockInfo::SaveListOfRecentBars (CList<HWND, HWND>& lstOrg, BOOL bForSlider)
{
if (bForSlider)
{
m_recentSliderInfo.m_lstRecentListOfBars.RemoveAll ();
m_recentSliderInfo.m_lstRecentListOfBars.AddTail (&lstOrg);
}
else
{
m_recentMiniFrameInfo.m_lstRecentListOfBars.RemoveAll ();
m_recentMiniFrameInfo.m_lstRecentListOfBars.AddTail (&lstOrg);
}
}
//*****************************************************************************
CList<HWND,HWND>& CBCGPRecentDockInfo::GetRecentListOfBars (BOOL bForSlider)
{
return bForSlider ? m_recentSliderInfo.m_lstRecentListOfBars :
m_recentMiniFrameInfo.m_lstRecentListOfBars;
}
//*****************************************************************************
CBCGPSlider* CBCGPRecentDockInfo::GetRecentDefaultSlider ()
{
return DYNAMIC_DOWNCAST (CBCGPSlider,
CWnd::FromHandlePermanent (m_hRecentDefaultSlider));
}
//*****************************************************************************
void CBCGPRecentDockInfo::SetInfo (BOOL bForSlider, CBCGPRecentDockInfo& srcInfo)
{
if (bForSlider)
{
m_dwRecentAlignmentToFrame = srcInfo.m_dwRecentAlignmentToFrame;
m_hRecentDefaultSlider = srcInfo.m_hRecentDefaultSlider;
m_recentSliderInfo.SetInfo (srcInfo.m_recentSliderInfo);
}
else
{
m_rectRecentFloatingRect = srcInfo.m_rectRecentFloatingRect;
m_hRecentMiniFrame = srcInfo.m_hRecentMiniFrame;
m_recentMiniFrameInfo.SetInfo (srcInfo.m_recentMiniFrameInfo);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -