2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#include "shsSCBDockContext.h"
|
|
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#undef THIS_FILE
|
|
|
|
|
static char THIS_FILE[]=__FILE__;
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef _SCB_REPLACE_MINIFRAME
|
|
|
|
|
#ifndef _SCB_MINIFRAME_CAPTION
|
|
|
|
|
|
|
|
|
|
static void AdjustRectangle(CRect& rect, CPoint pt)
|
|
|
|
|
{
|
|
|
|
|
int nXOffset = (pt.x < rect.left) ? (pt.x - rect.left) :
|
|
|
|
|
(pt.x > rect.right) ? (pt.x - rect.right) : 0;
|
|
|
|
|
int nYOffset = (pt.y < rect.top) ? (pt.y - rect.top) :
|
|
|
|
|
(pt.y > rect.bottom) ? (pt.y - rect.bottom) : 0;
|
|
|
|
|
rect.OffsetRect(nXOffset, nYOffset);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CHYSCBDockContext::StartDrag(CPoint pt)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_VALID(m_pBar);
|
|
|
|
|
m_bDragging = TRUE;
|
|
|
|
|
|
|
|
|
|
InitLoop();
|
|
|
|
|
|
|
|
|
|
ASSERT((m_pBar->m_dwStyle & CBRS_SIZE_DYNAMIC) != 0);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 得到真正的bar尺寸 (包括边界)
|
2026-09-28 15:28:50 +08:00
|
|
|
CRect rect;
|
|
|
|
|
m_pBar->GetWindowRect(rect);
|
|
|
|
|
m_ptLast = pt;
|
|
|
|
|
CSize sizeHorz = m_pBar->CalcDynamicLayout(0, LM_HORZ | LM_HORZDOCK);
|
|
|
|
|
CSize sizeVert = m_pBar->CalcDynamicLayout(0, LM_VERTDOCK);
|
|
|
|
|
CSize sizeFloat = m_pBar->CalcDynamicLayout(0, LM_HORZ | LM_MRUWIDTH);
|
|
|
|
|
|
|
|
|
|
m_rectDragHorz = CRect(rect.TopLeft(), sizeHorz);
|
|
|
|
|
m_rectDragVert = CRect(rect.TopLeft(), sizeVert);
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 计算Frame拖动的长方形
|
2026-09-28 15:28:50 +08:00
|
|
|
m_rectFrameDragHorz = CRect(rect.TopLeft(), sizeFloat);
|
|
|
|
|
|
|
|
|
|
#ifdef _MAC
|
|
|
|
|
CMiniFrameWnd::CalcBorders(&m_rectFrameDragHorz,WS_THICKFRAME, WS_EX_FORCESIZEBOX);
|
|
|
|
|
#else
|
|
|
|
|
CMiniFrameWnd::CalcBorders(&m_rectFrameDragHorz, WS_THICKFRAME);
|
|
|
|
|
#endif
|
|
|
|
|
m_rectFrameDragHorz.DeflateRect(2, 2);
|
|
|
|
|
m_rectFrameDragVert = m_rectFrameDragHorz;
|
|
|
|
|
|
2026-10-04 00:04:20 +08:00
|
|
|
// 调整长方形使点在其之内
|
2026-09-28 15:28:50 +08:00
|
|
|
AdjustRectangle(m_rectDragHorz, pt);
|
|
|
|
|
AdjustRectangle(m_rectDragVert, pt);
|
|
|
|
|
AdjustRectangle(m_rectFrameDragHorz, pt);
|
|
|
|
|
AdjustRectangle(m_rectFrameDragVert, pt);
|
|
|
|
|
|
|
|
|
|
// initialize tracking state and enter tracking loop
|
|
|
|
|
m_dwOverDockStyle = CanDock();
|
|
|
|
|
Move(pt); // call it here to handle special keys
|
|
|
|
|
Track();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif //_SCB_MINIFRAME_CAPTION
|
|
|
|
|
#endif //_SCB_REPLACE_MINIFRAME
|