初步修复

This commit is contained in:
Cussrro 2024-12-19 09:48:26 +08:00
parent 8fc4357cc6
commit e4714f3f0e
46705 changed files with 12004901 additions and 0 deletions

View file

@ -0,0 +1,231 @@
// DockingPaneManager.cpp: implementation of the CDockingPaneManager class.
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DockingContainers.h"
#include "DockingPaneManager.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////////
// CDockingPaneTabbedContainer
CDockingPaneTabbedContainer::CDockingPaneTabbedContainer(CXTPDockingPaneLayout* pLayout)
: CXTPDockingPaneTabbedContainer(pLayout)
{
GetCaptionButtons()->Add(new CXTPDockingPaneCaptionButton(IDS_ABOUT, this));
EnableToolTips();
}
void CDockingPaneTabbedContainer::OnCaptionButtonClick(CXTPDockingPaneCaptionButton* pButton)
{
CXTPDockingPaneTabbedContainer::OnCaptionButtonClick(pButton);
if (pButton->GetID() == IDS_ABOUT)
{
((CDockingContainersApp*)AfxGetApp())->OnAppAbout();
}
}
BOOL CDockingPaneTabbedContainer::IsCaptionButtonVisible(CXTPDockingPaneCaptionButton* pButton)
{
if (pButton->GetID() == IDS_ABOUT)
return DYNAMIC_DOWNCAST(CXTPDockingPaneMiniWnd, GetParentFrame()) == 0;
return CXTPDockingPaneTabbedContainer::IsCaptionButtonVisible(pButton);
}
//////////////////////////////////////////////////////////////////////////
// CDockingPaneMiniWnd
CDockingPaneMiniWnd::CDockingPaneMiniWnd(CXTPDockingPaneLayout* pLayout)
: CXTPDockingPaneMiniWnd(pLayout)
{
GetCaptionButtons()->Add(new CXTPDockingPaneCaptionButton(IDS_ABOUT, this));
}
void CDockingPaneMiniWnd::OnCaptionButtonClick(CXTPDockingPaneCaptionButton* pButton)
{
CXTPDockingPaneMiniWnd::OnCaptionButtonClick(pButton);
if (pButton->GetID() == IDS_ABOUT)
{
((CDockingContainersApp*)AfxGetApp())->OnAppAbout();
}
}
BEGIN_MESSAGE_MAP(CDockingPaneMiniWnd, CXTPDockingPaneMiniWnd)
ON_WM_NCRBUTTONDOWN()
END_MESSAGE_MAP()
void CDockingPaneMiniWnd::OnNcRButtonDown(UINT nHitTest, CPoint point)
{
if (nHitTest == HTCAPTION)
{
CXTPPopupBar* pPopupBar = CXTPPopupBar::CreatePopupBar(((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars());
CXTPDockingPaneManager* pManager = GetDockingPaneManager();
POSITION pos = pManager->GetPaneList().GetHeadPosition();
while (pos)
{
CXTPDockingPane* pPane = pManager->GetPaneList().GetNext(pos);
CXTPControl* pControl = pPopupBar->GetControls()->Add(xtpControlButton, pPane->GetID());
pControl->SetCaption(pPane->GetTitle());
pControl->SetFlags(xtpFlagManualUpdate);
}
UINT nID = CXTPCommandBars::TrackPopupMenu(pPopupBar, TPM_RETURNCMD, point.x, point.y, AfxGetMainWnd());
if (nID > 0)
{
pManager->ShowPane(nID);
}
pPopupBar->InternalRelease();
}
CXTPDockingPaneMiniWnd::OnNcRButtonDown(nHitTest, point);
}
//////////////////////////////////////////////////////////////////////////
// CDockingPanePaintManager
CDockingPanePaintManager::CDockingPanePaintManager()
{
m_nSplitterSize = 6;
}
void DrawAboutGlyph(CDC* pDC, CPoint pt, COLORREF clr)
{
CXTPPenDC pen(*pDC, clr);
POINT pts[] = {
{ pt.x - 1, pt.y - 2 }, { pt.x , pt.y - 3 }, { pt.x + 2, pt.y - 3 },
{ pt.x + 3, pt.y - 2 }, { pt.x + 3, pt.y -1 }, { pt.x + 1, pt.y + 1 },
{ pt.x + 1, pt.y + 3 }};
pDC->Polyline(&pts[0], sizeof(pts) / sizeof(POINT));
pDC->SetPixel(pt.x + 1, pt.y + 4, clr);
}
void CDockingPanePaintManager::RoundRect(CDC* pDC, CRect rc, COLORREF clr)
{
CXTPBrushDC brush(*pDC, clr);
CXTPPenDC pen(*pDC, GetXtremeColor(XPCOLOR_MENUBAR_BORDER));
pDC->RoundRect(rc.left, rc.top, rc.right, rc.bottom, 6, 6);
}
void CDockingPanePaintManager::DrawCaptionButtonEntry(CDC* pDC, CXTPDockingPaneCaptionButton* pButton, CPoint pt, COLORREF clrButton)
{
if (pButton->GetID() == IDS_ABOUT)
{
DrawAboutGlyph(pDC, CPoint(pt.x - 2, pt.y - 1), clrButton);
DrawAboutGlyph(pDC, CPoint(pt.x - 1, pt.y -1), clrButton);
}
else
{
CXTPDockingPaneOffice2003Theme::DrawCaptionButtonEntry(pDC, pButton, pt, clrButton);
}
}
void CDockingPanePaintManager::DrawCaptionButton(CDC* pDC, CXTPDockingPaneCaptionButton* pButton, COLORREF clrText)
{
if (m_bLunaTheme)
{
CXTPDockingPaneOffice2003Theme::DrawCaptionButton(pDC, pButton, clrText);
return;
}
CRect rc(pButton->GetRect());
if (pButton->IsSelected())
RoundRect(pDC, rc, m_clrNormalCaption.clrLight);
if (pButton->IsPressed())
RoundRect(pDC, rc, m_clrNormalCaption.clrDark);
DrawCaptionButtonEntry(pDC, pButton, rc.CenterPoint(), clrText);
}
void CDockingPanePaintManager::DrawSplitter(CDC& dc, CXTPDockingPaneSplitterWnd* pSplitter)
{
CXTPClientRect rc(pSplitter);
dc.FillSolidRect(rc, GetXtremeColor(XPCOLOR_3DFACE));
if (!pSplitter->IsHorizontal())
{
for (int y = 1; y < rc.Height() - 1; y += 4)
{
dc.FillSolidRect(3, y + 1, 2, 2, GetXtremeColor(COLOR_BTNHIGHLIGHT));
dc.FillSolidRect(2, y, 2, 2, GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
else
{
for (int x = 1; x < rc.Width() - 1; x += 4)
{
dc.FillSolidRect(x + 1, 3, 2, 2, GetXtremeColor(COLOR_BTNHIGHLIGHT));
dc.FillSolidRect(x, 2, 2, 2, GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
}
//////////////////////////////////////////////////////////////////////
// CDockingPaneManager
CDockingPaneManager::CDockingPaneManager()
{
}
CDockingPaneManager::~CDockingPaneManager()
{
}
CXTPDockingPaneBase* CDockingPaneManager::OnCreatePane(XTPDockingPaneType type, CXTPDockingPaneLayout* pLayout)
{
if (type == xtpPaneTypeTabbedContainer)
return new CDockingPaneTabbedContainer(pLayout);
if (type == xtpPaneTypeMiniWnd)
return new CDockingPaneMiniWnd(pLayout);
return CXTPDockingPaneManager::OnCreatePane(type, pLayout);
}