📄 bcgpframewnd.cpp
字号:
void CBCGPFrameWnd::OnActivateApp(BOOL bActive, HTASK /*hTask*/)
#endif
{
m_dockManager.OnActivateFrame (bActive);
}
//****************************************************************************
void CBCGPFrameWnd::DelayUpdateFrameMenu(HMENU hMenuAlt)
{
OnUpdateFrameMenu (hMenuAlt);
CFrameWnd::DelayUpdateFrameMenu (hMenuAlt);
}
//****************************************************************************
COleClientItem* CBCGPFrameWnd::GetInPlaceActiveItem ()
{
CFrameWnd* pActiveFrame = GetActiveFrame ();
if (pActiveFrame == NULL)
{
return NULL;
}
ASSERT_VALID (pActiveFrame);
CView* pView = pActiveFrame->GetActiveView ();
if (pView == NULL)
{
return NULL;
}
ASSERT_VALID (pView);
COleDocument* pDoc = DYNAMIC_DOWNCAST (COleDocument, pView->GetDocument ());
if (pDoc == NULL)
{
return NULL;
}
ASSERT_VALID (pDoc);
return pDoc->GetInPlaceActiveItem (pView);
}
//****************************************************************************
void CBCGPFrameWnd::OnUpdateFrameMenu (HMENU hMenuAlt)
{
CFrameWnd::OnUpdateFrameMenu (hMenuAlt);
if (m_Impl.m_pMenuBar != NULL &&
(m_Impl.m_pMenuBar->GetStyle () & WS_VISIBLE))
{
COleClientItem* pActiveItem = GetInPlaceActiveItem ();
if (pActiveItem == NULL ||
pActiveItem->GetInPlaceWindow () == NULL)
{
SetMenu (NULL);
}
else
{
SetMenu (CMenu::FromHandle (hMenuAlt));
}
}
}
//*****************************************************************************
void CBCGPFrameWnd::OnDestroy()
{
if (m_hAccelTable != NULL)
{
::DestroyAcceleratorTable (m_hAccelTable);
m_hAccelTable = NULL;
}
m_dockManager.m_bEnableAdjustLayout = FALSE;
CList<HWND, HWND> lstChildren;
CWnd* pNextWnd = GetTopWindow ();
while (pNextWnd != NULL)
{
lstChildren.AddTail (pNextWnd->m_hWnd);
pNextWnd = pNextWnd->GetNextWindow ();
}
for (POSITION pos = lstChildren.GetHeadPosition (); pos != NULL;)
{
HWND hwndNext = lstChildren.GetNext (pos);
if (IsWindow (hwndNext) && ::GetParent (hwndNext) == m_hWnd)
{
::DestroyWindow (hwndNext);
}
}
CFrameWnd::OnDestroy();
}
//*****************************************************************************
//******************* dockmanager layer ***************************************
//*****************************************************************************
void CBCGPFrameWnd::AddDockBar ()
{
ASSERT_VALID (this);
}
//*****************************************************************************
BOOL CBCGPFrameWnd::AddControlBar (CBCGPBaseControlBar* pControlBar, BOOL bTail)
{
ASSERT_VALID (this);
return m_dockManager.AddControlBar (pControlBar, bTail);
}
//*****************************************************************************
BOOL CBCGPFrameWnd::InsertControlBar (CBCGPBaseControlBar* pControlBar,
CBCGPBaseControlBar* pTarget, BOOL bAfter)
{
ASSERT_VALID (this);
return m_dockManager.InsertControlBar (pControlBar, pTarget, bAfter);
}
//*****************************************************************************
void CBCGPFrameWnd::RemoveControlBarFromDockManager (CBCGPBaseControlBar* pControlBar, BOOL bDestroy,
BOOL bAdjustLayout, BOOL bAutoHide)
{
ASSERT_VALID (this);
m_dockManager.RemoveControlBarFromDockManager (pControlBar, bDestroy, bAdjustLayout, bAutoHide);
}
//*****************************************************************************
void CBCGPFrameWnd::DockControlBar (CBCGPBaseControlBar* pBar, UINT nDockBarID,
LPCRECT lpRect)
{
ASSERT_VALID (this);
m_dockManager.DockControlBar (pBar, nDockBarID, lpRect);
}
//*****************************************************************************
CBCGPBaseControlBar* CBCGPFrameWnd::ControlBarFromPoint (CPoint point,
int nSensitivity, bool bExactBar,
CRuntimeClass* pRTCBarType) const
{
ASSERT_VALID (this);
return m_dockManager.ControlBarFromPoint (point, nSensitivity, bExactBar,
pRTCBarType);
}
//*****************************************************************************
CBCGPBaseControlBar* CBCGPFrameWnd::ControlBarFromPoint (CPoint point,
int nSensitivity, DWORD& dwAlignment,
CRuntimeClass* pRTCBarType) const
{
ASSERT_VALID (this);
return m_dockManager.ControlBarFromPoint (point, nSensitivity, dwAlignment,
pRTCBarType);
}
//*****************************************************************************
BOOL CBCGPFrameWnd::IsPointNearDockBar (CPoint point, DWORD& dwBarAlignment,
BOOL& bOuterEdge) const
{
ASSERT_VALID (this);
return m_dockManager.IsPointNearDockBar (point, dwBarAlignment, bOuterEdge);
}
//*****************************************************************************
void CBCGPFrameWnd::AdjustDockingLayout (HDWP hdwp)
{
ASSERT_VALID (this);
if (m_dockManager.IsInAdjustLayout ())
{
return;
}
m_dockManager.AdjustDockingLayout (hdwp);
AdjustClientArea ();
if (m_dockManager.IsOLEContainerMode ())
{
RecalcLayout ();
}
}
//*****************************************************************************
void CBCGPFrameWnd::AdjustClientArea ()
{
CWnd* pChildWnd = GetDlgItem (AFX_IDW_PANE_FIRST);
if (pChildWnd != NULL)
{
CRect rectClientAreaBounds = m_dockManager.GetClientAreaBounds ();
rectClientAreaBounds.left += m_rectBorder.left;
rectClientAreaBounds.top += m_rectBorder.top;
rectClientAreaBounds.right -= m_rectBorder.right;
rectClientAreaBounds.bottom -= m_rectBorder.bottom;
pChildWnd->CalcWindowRect (rectClientAreaBounds);
if (!pChildWnd->IsKindOf (RUNTIME_CLASS (CSplitterWnd)))
{
pChildWnd->ModifyStyle (0, WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
}
else
{
pChildWnd->ModifyStyle (0, WS_CLIPSIBLINGS);
}
pChildWnd->SetWindowPos (&wndBottom, rectClientAreaBounds.left,
rectClientAreaBounds.top,
rectClientAreaBounds.Width (),
rectClientAreaBounds.Height (),
SWP_NOACTIVATE);
}
}
//*****************************************************************************
BOOL CBCGPFrameWnd::OnMoveMiniFrame (CWnd* pFrame)
{
ASSERT_VALID (this);
return m_dockManager.OnMoveMiniFrame (pFrame);
}
//*****************************************************************************
BOOL CBCGPFrameWnd::EnableDocking (DWORD dwDockStyle)
{
return m_dockManager.EnableDocking (dwDockStyle);
}
//****************************************************************************************
BOOL CBCGPFrameWnd::EnableAutoHideBars (DWORD dwDockStyle)
{
return m_dockManager.EnableAutoHideBars (dwDockStyle);
}
//****************************************************************************************
CBCGPBaseControlBar* CBCGPFrameWnd::GetControlBar (UINT nID)
{
ASSERT_VALID (this);
CBCGPBaseControlBar* pBar = m_dockManager.FindBarByID (nID, TRUE);
return pBar;
}
//****************************************************************************************
void CBCGPFrameWnd::ShowControlBar (CBCGPBaseControlBar* pBar, BOOL bShow, BOOL bDelay, BOOL bActivate)
{
ASSERT_VALID (this);
ASSERT_VALID (pBar);
pBar->ShowControlBar (bShow, bDelay, bActivate);
}
//*************************************************************************************
void CBCGPFrameWnd::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
{
CBCGPBaseControlBar* pBar = GetControlBar(pCmdUI->m_nID);
if (pBar != NULL)
{
pCmdUI->SetCheck((pBar->GetStyle() & WS_VISIBLE) != 0);
return;
}
pCmdUI->ContinueRouting();
}
//*************************************************************************************
BOOL CBCGPFrameWnd::OnBarCheck(UINT nID)
{
ASSERT_VALID (this);
CBCGPBaseControlBar* pBar = GetControlBar(nID);
if (pBar != NULL)
{
ShowControlBar(pBar, (pBar->GetStyle() & WS_VISIBLE) == 0, FALSE, FALSE);
return TRUE;
}
return FALSE;
}
//*************************************************************************************
void CBCGPFrameWnd::OnSizing(UINT fwSide, LPRECT pRect)
{
CFrameWnd::OnSizing(fwSide, pRect);
AdjustDockingLayout ();
}
//*************************************************************************************
void CBCGPFrameWnd::RecalcLayout (BOOL bNotify)
{
if (m_bInRecalcLayout)
return;
m_bInRecalcLayout = TRUE;
if (!m_bIsMinimized)
{
CView* pView = GetActiveView ();
if (m_dockManager.IsPrintPreviewValid () ||
m_dockManager.IsOLEContainerMode ())
{
if (pView != NULL && pView->IsKindOf (RUNTIME_CLASS (CBCGPPrintPreviewView)))
{
m_dockManager.RecalcLayout (bNotify);
CRect rectClient = m_dockManager.GetClientAreaBounds ();
pView->SetWindowPos (NULL, rectClient.left, rectClient.top,
rectClient.Width (), rectClient.Height (),
SWP_NOZORDER | SWP_NOACTIVATE);
}
else
{
#ifdef _BCGP_USE_OLEIMPL_
COleClientItem* pActiveItem = GetInPlaceActiveItem ();
if (bNotify && pActiveItem != NULL && pActiveItem->m_pInPlaceFrame != NULL)
{
pActiveItem->m_pInPlaceFrame->OnRecalcLayout ();
}
#else
m_bInRecalcLayout = FALSE;
CFrameWnd::RecalcLayout (bNotify);
#endif
AdjustClientArea ();
}
}
else
{
m_dockManager.RecalcLayout (bNotify);
AdjustClientArea ();
}
}
m_bInRecalcLayout = FALSE;
}
//****************************************************************************************
BOOL CBCGPFrameWnd::NegotiateBorderSpace( UINT nBorderCmd, LPRECT lpRectBorder )
{
CRect border, request;
switch (nBorderCmd)
{
case borderGet:
{
CFrameWnd::NegotiateBorderSpace (nBorderCmd, lpRectBorder);
CRect rectBounds = m_dockManager.GetClientAreaBounds ();
ASSERT(lpRectBorder != NULL);
*lpRectBorder = rectBounds;
break;
}
case borderRequest:
return TRUE;
case borderSet:
return CFrameWnd::NegotiateBorderSpace (nBorderCmd, lpRectBorder);
default:
ASSERT(FALSE); // invalid CFrameWnd::BorderCmd
}
return TRUE;
}
//*************************************************************************************
void CBCGPFrameWnd::OnSetPreviewMode(BOOL bPreview, CPrintPreviewState* pState)
{
ASSERT_VALID (this);
m_dockManager.SetPrintPreviewMode (bPreview, pState);
DWORD dwSavedState = pState->dwStates;
CFrameWnd::OnSetPreviewMode (bPreview, pState);
pState->dwStates = dwSavedState;
AdjustDockingLayout ();
RecalcLayout ();
}
//*************************************************************************************
BOOL CBCGPFrameWnd::OnShowControlBars (BOOL bShow)
{
ASSERT_VALID (this);
BOOL bResult = m_dockManager.ShowControlBars (bShow);
AdjustDockingLayout ();
return bResult;
}
//********************************************************************************
LRESULT CBCGPFrameWnd::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM)
{
m_dockManager.SendMessageToMiniFrames (WM_IDLEUPDATECMDUI);
return 0L;
}
//****************************************************************************************
void CBCGPFrameWnd::OnSize(UINT nType, int cx, int cy)
{
m_bIsMinimized = (nType == SIZE_MINIMIZED);
m_dockManager.OnActivateFrame (!m_bIsMinimized);
if (!m_bIsMinimized && nType != SIZE_MAXIMIZED && !m_bWasMaximized)
{
m_dockManager.m_bSizeFrame = TRUE;
CFrameWnd::OnSize(nType, cx, cy);
AdjustDockingLayout ();
m_dockManager.m_bSizeFrame = FALSE;
return;
}
CFrameWnd::OnSize(nType, cx, cy);
if (nType == SIZE_MAXIMIZED || (nType == SIZE_RESTORED && m_bWasMaximized))
{
RecalcLayout ();
}
m_bWasMaximized = (nType == SIZE_MAXIMIZED);
}
//****************************************************************************************
LRESULT CBCGPFrameWnd::OnExitSizeMove (WPARAM, LPARAM)
{
m_dockManager.FixupVirtualRects ();
return 0;
}
//****************************************************************************************
void CBCGPFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (IsFullScreen ())
{
m_Impl.m_FullScreenMgr.OnGetMinMaxInfo (lpMMI);
}
else
{
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -