XTPMarkupControl.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:5k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupButton.cpp: implementation of the CXTPMarkupButton class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "XTPMarkupControl.h"
  22. #include "XTPMarkupBuilder.h"
  23. #include "XTPMarkupTextBlock.h"
  24. #include "XTPMarkupContext.h"
  25. #include "XTPMarkupBorder.h"
  26. #include "XTPMarkupPanel.h"
  27. #include "XTPMarkupInline.h"
  28. #ifdef _DEBUG
  29. #undef THIS_FILE
  30. static char THIS_FILE[]=__FILE__;
  31. #define new DEBUG_NEW
  32. #endif
  33. CXTPMarkupDependencyProperty* CXTPMarkupControl::m_pBackgroundProperty = NULL;
  34. CXTPMarkupDependencyProperty* CXTPMarkupControl::m_pForegroundProperty = NULL;
  35. CXTPMarkupDependencyProperty* CXTPMarkupControl::m_pPaddingProperty = NULL;
  36. IMPLEMENT_MARKUPCLASS(L"Control", CXTPMarkupControl, CXTPMarkupFrameworkElement)
  37. void CXTPMarkupControl::RegisterMarkupClass()
  38. {
  39. CXTPMarkupBorder::RegisterType();
  40. CXTPMarkupPanel::RegisterType();
  41. CXTPMarkupTextElement::RegisterType();
  42. m_pPaddingProperty = CXTPMarkupBorder::m_pPaddingProperty->AddOwner(MARKUP_TYPE(CXTPMarkupControl));
  43. m_pBackgroundProperty = CXTPMarkupPanel::m_pBackgroundProperty->AddOwner(MARKUP_TYPE(CXTPMarkupControl));
  44. m_pForegroundProperty = CXTPMarkupTextElement::m_pForegroundProperty->AddOwner(MARKUP_TYPE(CXTPMarkupControl));
  45. }
  46. CSize CXTPMarkupControl::ArrangeOverride(CSize szFinalSize)
  47. {
  48. if (GetVisualChildrenCount() > 0)
  49. {
  50. CXTPMarkupUIElement* pVisualChild = (CXTPMarkupUIElement*)GetVisualChild(0);
  51. pVisualChild->Arrange(CRect(0, 0, szFinalSize.cx, szFinalSize.cy));
  52. }
  53. return szFinalSize;
  54. }
  55. CSize CXTPMarkupControl::MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize)
  56. {
  57. if (GetVisualChildrenCount() > 0)
  58. {
  59. CXTPMarkupUIElement* pVisualChild = (CXTPMarkupUIElement*)GetVisualChild(0);
  60. pVisualChild->Measure(pDC, szAvailableSize);
  61. return pVisualChild->GetDesiredSize();
  62. }
  63. return CSize(0, 0);
  64. }
  65. //////////////////////////////////////////////////////////////////////////
  66. // CXTPMarkupContentControl
  67. CXTPMarkupDependencyProperty* CXTPMarkupContentControl::m_pContentProperty = NULL;
  68. IMPLEMENT_MARKUPCLASS(NULL, CXTPMarkupContentControl, CXTPMarkupControl)
  69. void CXTPMarkupContentControl::RegisterMarkupClass()
  70. {
  71. m_pContentProperty = CXTPMarkupDependencyProperty::Register(L"Content", MARKUP_TYPE(CXTPMarkupUIElement), MARKUP_TYPE(CXTPMarkupContentControl),
  72. new CXTPMarkupPropertyMetadata(NULL, &CXTPMarkupBuilder::ConvertContent, CXTPMarkupPropertyMetadata::flagAffectsMeasure));
  73. }
  74. CXTPMarkupContentControl::CXTPMarkupContentControl()
  75. {
  76. }
  77. CXTPMarkupContentControl::~CXTPMarkupContentControl()
  78. {
  79. }
  80. CXTPMarkupUIElement* CXTPMarkupContentControl::GetContent() const
  81. {
  82. return MARKUP_STATICCAST(CXTPMarkupUIElement, GetValue(m_pContentProperty));
  83. }
  84. void CXTPMarkupContentControl::SetContent(CXTPMarkupUIElement* pContent)
  85. {
  86. SetValue(m_pContentProperty, pContent);
  87. }
  88. void CXTPMarkupContentControl::SetContentObject(CXTPMarkupBuilder* pBuilder, CXTPMarkupObject* pContent)
  89. {
  90. if (GetContent() != NULL)
  91. {
  92. pBuilder->ThrowBuilderException(CXTPMarkupBuilder::FormatString(_T("'%ls' already has a child and cannot add '%ls'")
  93. _T(". '%ls' can accept only one child."),
  94. (LPCTSTR)GetType()->m_lpszClassName, (LPCTSTR)pContent->GetType()->m_lpszClassName, (LPCTSTR)GetType()->m_lpszClassName));
  95. }
  96. if (IsStringObject(pContent))
  97. {
  98. CXTPMarkupTextBlock* pTextBlock = MARKUP_CREATE(CXTPMarkupTextBlock, GetMarkupContext());
  99. pTextBlock->SetContentObject(pBuilder, (CXTPMarkupString*)pContent);
  100. SetContent(pTextBlock);
  101. }
  102. else if (pContent->IsKindOf(MARKUP_TYPE(CXTPMarkupUIElement)))
  103. {
  104. SetContent((CXTPMarkupUIElement*)pContent);
  105. }
  106. else
  107. {
  108. pBuilder->ThrowBuilderException(CXTPMarkupBuilder::FormatString(_T("'%ls' object cannot be added to '%ls'. Object cannot be converted to type 'CXTPMarkupUIElement'"),
  109. (LPCTSTR)pContent->GetType()->m_lpszClassName, (LPCTSTR)GetType()->m_lpszClassName));
  110. }
  111. }
  112. BOOL CXTPMarkupContentControl::HasContentObject() const
  113. {
  114. return GetContent() != NULL;
  115. }