XTPMarkupBorder.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
- // XTPMarkupBorder.cpp: implementation of the CXTPMarkupBorder 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 "XTPMarkupBorder.h"
- #include "XTPMarkupDrawingContext.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CXTPMarkupDependencyProperty* CXTPMarkupBorder::m_pBackgroundProperty = NULL;
- CXTPMarkupDependencyProperty* CXTPMarkupBorder::m_pPaddingProperty = NULL;
- CXTPMarkupDependencyProperty* CXTPMarkupBorder::m_pBorderThicknessProperty = NULL;
- CXTPMarkupDependencyProperty* CXTPMarkupBorder::m_pBorderBrushProperty = NULL;
- IMPLEMENT_MARKUPCLASS(L"Border", CXTPMarkupBorder, CXTPMarkupFrameworkElement);
- void CXTPMarkupBorder::RegisterMarkupClass()
- {
- m_pBackgroundProperty = CXTPMarkupDependencyProperty::Register(L"Background", MARKUP_TYPE(CXTPMarkupBrush), MARKUP_TYPE(CXTPMarkupBorder),
- new CXTPMarkupPropertyMetadata(NULL, CXTPMarkupPropertyMetadata::flagAffectsRender));
- m_pPaddingProperty = CXTPMarkupDependencyProperty::Register(L"Padding", MARKUP_TYPE(CXTPMarkupThickness), MARKUP_TYPE(CXTPMarkupBorder),
- new CXTPMarkupPropertyMetadata(CXTPMarkupThickness::CreateValue(), CXTPMarkupPropertyMetadata::flagAffectsMeasure));
- m_pBorderThicknessProperty = CXTPMarkupDependencyProperty::Register(L"BorderThickness", MARKUP_TYPE(CXTPMarkupThickness), MARKUP_TYPE(CXTPMarkupBorder),
- new CXTPMarkupPropertyMetadata(CXTPMarkupThickness::CreateValue(), CXTPMarkupPropertyMetadata::flagAffectsMeasure));
- m_pBorderBrushProperty = CXTPMarkupDependencyProperty::Register(L"BorderBrush", MARKUP_TYPE(CXTPMarkupBrush), MARKUP_TYPE(CXTPMarkupBorder),
- new CXTPMarkupPropertyMetadata(NULL, CXTPMarkupPropertyMetadata::flagAffectsRender));
- }
- CXTPMarkupBorder::CXTPMarkupBorder()
- {
- }
- CXTPMarkupBorder::~CXTPMarkupBorder()
- {
- }
- CXTPMarkupBrush* CXTPMarkupBorder::GetBackground() const
- {
- return MARKUP_STATICCAST(CXTPMarkupBrush, GetValue(m_pBackgroundProperty));
- }
- CXTPMarkupBrush* CXTPMarkupBorder::GetBorderBrush() const
- {
- return MARKUP_STATICCAST(CXTPMarkupBrush, GetValue(m_pBorderBrushProperty));
- }
- void CXTPMarkupBorder::SetBackground(CXTPMarkupBrush* brush)
- {
- SetValue(m_pBackgroundProperty, brush);
- }
- void CXTPMarkupBorder::SetBorderBrush(CXTPMarkupBrush* brush)
- {
- SetValue(m_pBorderBrushProperty, brush);
- }
- CSize CXTPMarkupBorder::MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize)
- {
- CSize size2 = GetBorderThickness()->Size();
- CSize size3 = GetPadding()->Size();
- if (m_pChild != NULL)
- {
- CSize size4(size2.cx + size3.cx, size2.cy + size3.cy);
- CSize availableSize(max(0, szAvailableSize.cx - size4.cx), max(0, szAvailableSize.cy - size4.cy));
- m_pChild->Measure(pDC, availableSize);
- CSize desiredSize = m_pChild->GetDesiredSize();
- return CSize(desiredSize.cx + size4.cx, desiredSize.cy + size4.cy);
- }
- return CSize(size2.cx + size3.cx, size2.cy + size3.cy);
- }
- CSize CXTPMarkupBorder::ArrangeOverride(CSize szFinalSize)
- {
- if (m_pChild != NULL)
- {
- CRect rt(0, 0, szFinalSize.cx, szFinalSize.cy);
- CRect rect2 = CXTPMarkupThickness::HelperDeflateRect(rt, GetBorderThickness());
- CRect finalRect = CXTPMarkupThickness::HelperDeflateRect(rect2, GetPadding());
- m_pChild->Arrange(finalRect);
- }
- return szFinalSize;
- }
- void CXTPMarkupBorder::OnRender(CXTPMarkupDrawingContext* pDC)
- {
- CSize szRender = GetActualSize();
- if (szRender.cx <= 0 || szRender.cy <= 0)
- return;
- CXTPMarkupThickness* pBorderThickness = GetBorderThickness();
- CXTPMarkupBrush* pBorderBrush = GetBorderBrush();
- if (!pBorderThickness->IsZero() && pBorderBrush)
- {
- if (pBorderThickness->left > 0)
- {
- pDC->DrawRectangle(pBorderBrush, CRect(0, 0, pBorderThickness->left, szRender.cy));
- }
- if (pBorderThickness->right > 0)
- {
- pDC->DrawRectangle(pBorderBrush, CRect(szRender.cx - pBorderThickness->right, 0, szRender.cx, szRender.cy));
- }
- if (pBorderThickness->top > 0)
- {
- pDC->DrawRectangle(pBorderBrush, CRect(0, 0, szRender.cx, pBorderThickness->top));
- }
- if (pBorderThickness->bottom > 0)
- {
- pDC->DrawRectangle(pBorderBrush, CRect(0, szRender.cy - pBorderThickness->bottom, szRender.cx, szRender.cy));
- }
- }
- CXTPMarkupBrush* pBackground = GetBackground();
- if (pBackground)
- {
- CPoint point(pBorderThickness->left, pBorderThickness->top);
- CPoint point2(szRender.cx - pBorderThickness->right, szRender.cy - pBorderThickness->bottom);
- if ((point2.x > point.x) && (point2.y > point.y))
- {
- pDC->DrawRectangle(pBackground, CRect(point, point2));
- }
- }
- }
- CXTPMarkupInputElement* CXTPMarkupBorder::InputHitTestOverride(CPoint /*point*/) const
- {
- return GetBackground() != NULL ? (CXTPMarkupInputElement*)this : NULL;
- }